//线程按顺序执行:A->B->C->D
public class ThreadTest {
private int order = 0;
private Object lock = new Object(); //使用synchronized控制线程顺序执行
public static void main(String[] args) {
ThreadTest o = new ThreadTest();
ThreadA t1 = o.new ThreadA();
ThreadB t2 = o.new ThreadB();
ThreadC t3 = o.new ThreadC();
ThreadD t4 = o.new ThreadD();
t1.start();
t2.start();
t3.start();
t4.start();
}
class ThreadA extends Thread{
public void run() {
synchronized(lock) {
while(order !=0) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(order == 0) {
System.out.println(order);
order++;
lock.notifyAll();
}
}
}
}
class ThreadB extends Thread{
public void run() {
synchronized(lock) {
while(order !=1) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(order == 1) {
System.out.println(order);
order++;
lock.notifyAll();
}else {
}
}
}
}
class ThreadC extends Thread{
public void run() {
synchronized(lock) {
while(order != 2) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(order == 2) {
System.out.println(order);
order++;
lock.notifyAll();
}
}
}
}
class ThreadD extends Thread{
public void run() {
synchronized(lock) {
while(order != 3) {
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(order == 3) {
System.out.println(order);
order++;
lock.notifyAll();
}
}
}
}
}