package com.myh.kb13.t805.service2;
/**
* @Description:
* @author:myh
* @date: 2021/8/5 11:19
*/
public class Mylight {
int flag=1;
public synchronized void red(){
try {
while (flag!=1){
wait();
}
System.out.println("红灯亮");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
flag=2;//修改信号量 让后面一个灯必须是黄灯
notifyAll();
}
public synchronized void yellow(){
try {
while (flag!=2){
wait();
}
System.out.println("黄灯亮");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
flag=3;//修改信号量 让后面一个灯必须是黄灯
notifyAll();
}
public synchronized void green(){
try {
while (flag!=3){
wait();
}
System.out.println("绿灯亮");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
flag=1;//修改信号量 让后面一个灯必须是黄灯
notifyAll();
}
}
package com.myh.kb13.t805.service2;
/**
* @Description:
* @author:myh
* @date: 2021/8/5 11:28
*/
public class MyDemo {
public static void main(String[] args) {
String []lights={"red","yellow","green"};
Light light=new Light();
for (int i = 0; i < 3; i++) {
Thread tn=new Thread(light);
tn.setName(lights[i]);
tn.start();
}
}
}
package com.myh.kb13.t805.service2;
/**
* @Description:
* @author:myh
* @date: 2021/8/5 11:24
*/
public class Light implements Runnable{
Mylight light =new Mylight();
@Override
public void run() {
while (true){
String name= Thread.currentThread().getName();
if(name.equals("red")){
light.red();
}else if (name.equals("yellow")){
light.yellow();
}else {
light.green();
}
}
}
}