线程默认都是非守护线程,非守护线程也称作用户线程。当所有用户线程都结束时,守护线程也立即结束。因为守护线程随时会结束,所以守护线程所做的工作应该是可以随时结束而不影响运行结果的工作。
当多个线程共享同一个变量等资源时,需要确保资源在某一时刻只有一个线程占用,这个过程就是线程同步。
public class HelloWorld {
public static void main(String[] args) {
Ticket ticket = new Ticket();
for (int i = 1; i <= 4; i++) {
Thread t = new Thread(ticket);
t.setName("窗口" + i);
if (i == 3) {
t.setPriority(10);
} else {
t.setPriority(1);
}
t.start();
}
}
}
/**
* Ticket
*/
class Ticket implements Runnable {
private static int ticket = 100;
@Override
public void run() {
synchronized (this) {
while (Ticket.ticket > 0) {
System.out.println(Thread.currentThread().getName() + ": " + Ticket.ticket);
Ticket.ticket--;
try {
wait(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class HelloWorld {
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
Thread t = new Ticket();
t.setName("窗口" + i);
if (i == 3) {
t.setPriority(10);
} else {
t.setPriority(1);
}
t.start();
}
}
}
/**
* Ticket
*/
class Ticket extends Thread {
private static int ticket = 100;
@Override
public void run() {
synchronized (this) {
while (Ticket.ticket > 0) {
System.out.println(Thread.currentThread().getName() + ": " + Ticket.ticket);
Ticket.ticket--;
try {
wait(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
分别用两种不同的方式实现线程体。