JAVA 4个线程依次输出1 2 3 4
public class Test {
int task = 1;
public static void main(String[] args) {
Test t = new Test();
Thread a = new ThreadA(t);
Thread b = new ThreadB(t);
Thread c = new ThreadC(t);
Thread d = new ThreadD(t);
b.start();
c.start();
d.start();
a.start();
}
}
class ThreadA extends Thread {
private Test t;
public ThreadA(Test t) {
this.t = t;
}
@Override
public void run() {
while (true) {
System.out.println("thread A");
synchronized (t) {
if (t.task == 1) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(t.task);
t.task = 2;
break;
}
t.notify();
}
}
}
}
class ThreadB extends Thread {
private Test t;
public ThreadB(Test t) {
this.t = t;
}
@Override
public void run() {
while (true) {
synchronized (t) {
if (t.task == 2) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(t.task);
t.task = 3;
break;
}
t.notify();
}
}
}
}
class ThreadC extends Thread {
private Test t;
public ThreadC(Test t) {
this.t = t;
}
@Override
public void run() {
while (true) {
synchronized (t) {
if (t.task == 3) {
try {
t.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(t.task);
t.task = 4;
break;
}
t.notify();
}
}
}
}
class ThreadD extends Thread {
private Test t;
public ThreadD(Test t) {
this.t = t;
}
@Override
public void run() {
while (true) {
synchronized (t) {
if (t.task == 4) {
System.out.println(t.task);
break;
}
t.notify();
}
}
}
}