分析:
这个题的思路和我的上一篇博客https://blog.csdn.net/huaijiu123/article/details/86370451这个题的思路是相同的,都是利用信号量来解决。
不同的是:
- 要将notify()换成notifyAll(),这是为什么呢?
万一A打印完之后,你只唤醒了C而没唤醒B,这就会产生死锁,所以要唤醒所有线程。 - 3个线程同时启动后,如果是C先进,这时flag都是1,但先打印的是C,后边只是控制了打印的顺序。要确保A一定先打印,就必须让A走A方法,B走B方法,C走C方法。这时就算C先进去,但它只能进printC()方法,此时flag == 1,它是不能打印C的,得等。
package www.java.test;
import java.io.OutputStream;
class Print{
int flag = 1;
int count = 0;
public int getCount() {
return count;
}
public synchronized void printA(){
while(flag != 1){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.print(Thread.currentThread().getName());
count+&#