先吐槽一波
今天学习lock的时候突然想起来
大一学Java的时候有个题叫
用线程加锁模拟红绿灯
当时感觉挺傻的
红绿灯是按顺序执行的
为什么开三个线程让他们抢占cpu
现在想想可能老师的目的是让我们练习线程间的通讯的吧(强力帮老师圆回来)
当时要求用 synchronized 写
package com.nwk.sync;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
*
* 线程间的定制话通线
*/
//第一步 创建资源类
class ShareResource {
//定义标志位
private int flag = 1; // 1 AA 2 BB 3 CC
public synchronized void print25() {
try {
//判断
while(flag != 1) {
//等待
this.wait();
}
//干活
System.out.println("红灯亮");
Thread.sleep(2500);
System.out.println("红灯灭");
//通知
flag = 2; //修改标志位 2
} catch (InterruptedException e) {
e.printStackTrace();
}
this.notifyAll();
}
public synchronized void print15() {
try {
while(flag != 2) {
this.wait();
}
System.out.println("绿灯亮");
Thread.sleep(1500);
System.out.println("绿灯灭")</