三线程协同问题,使用synchronized + wait + notifyAll实现
定义一个对象,将方法都同步,每个方法都用一个线程启动,对象之间有个全局变量,线程通过全局变量的设置来控制线程执行顺序。
main.class
public class Solution1006 {
public static void main(String[] args) {
MyObject my = new MyObject();
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0; i<5; i++){
my.printA();
}
}
},"A").start();
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0; i<5; i++)
my.printB();
}
},"B").start();
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0; i<5; i++)
my.printC();
}
},"C").start();
}
}
MyObject.class
public class MyObject {
private static int flag = 0;
public synchronized void printA(){
while(flag != 0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName());
flag = 1;
this.notifyAll();
}
public synchronized void printB(){
while(flag != 1){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName());
flag = 2;
this.notifyAll();
}
public synchronized void printC(){
while(flag != 2){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName());
flag = 0;
this.notifyAll();
}
}
结果:
![]()
820

被折叠的 条评论
为什么被折叠?



