package com.yihaomen.mybatis.inter;
import java.io.IOException;
public class TestThread {
public static void main(String[] args) throws IOException {
final Test obj = new Test();
new Thread() {
public void run() {
obj.m1();
}
}.start();
new Thread() {
public void run() {
obj.m2();
}
}.start();
new Thread() {
public void run() {
obj.m3();
}
}.start();
}
}
class Test {
static int count;
volatile int target = 1;
synchronized void m1() {
for (int i = 0; i < 10; i++) {
while (target == 2 || target == 3) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("m1() =" + i);
target = 2;
notifyAll();
}
}
synchronized void m2() {
for (int i = 0; i < 10; i++) {
while (target == 1 || target == 3) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("m2() =" + i);
target = 3;
notifyAll();
}
}
synchronized void m3() {
for (int i = 0; i < 10; i++) {
while (target == 1 || target == 2) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("m3() =" + i);
target = 1;
notifyAll();
}
}
}
输出结果:
m1() =0 m2() =0 m3() =0 m1() =1 m2() =1 m3() =1 m1() =2 m2() =2 m3() =2 m1() =3 m2() =3 m3() =3 m1() =4 m2() =4 m3() =4 m1() =5 m2() =5 m3() =5 m1() =6 m2() =6 m3() =6 m1() =7 m2() =7 m3() =7 m1() =8 m2() =8 m3() =8 m1() =9 m2() =9 m3() =9