//使用while循环,当线程1执行结束后唤醒其他所有线程并释放锁,线程1和线程2和线程3争抢锁,需要确保线程2争取到锁,假设线程3和线程1抢到锁则进入waiting状态。依次类推。。。。。
public class Demo {
static int flag = 1;
static Object ob = new Object();
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
synchronized (ob) {
while (flag != 1) {
try {
ob.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
method1();
flag = 2;
ob.notifyAll();
}
}
}
}).start();
new Thread() {
@Override
public void run() {
while (true) {
synchronized (ob) {
while (flag != 2) {
try {
ob.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
method2();
flag = 3;
ob.notifyAll();
}
}
}
}.start();
new Thread() {
@Override
public void run() {
while (true) {
synchronized (ob) {
while (flag != 3) {
try {
ob.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
method3();
flag = 1;
ob.notifyAll();
}
}
}
}.start();
}
public static void method1(){
System.out.print("a");
System.out.print("b");
System.out.print("c");
System.out.print("d");
System.out.println(" ");
}
public static void method2(){
System.out.print("A");
System.out.print("B");
System.out.print("C");
System.out.print("D");
System.out.println(" ");
}
public static void method3(){
System.out.print("1");
System.out.print("2");
System.out.print("3");
System.out.print("4");
System.out.println(" ");
}
}