Lock与Condition代替Synchronized
来源:互联网 发布:lol比赛 选手介绍数据 编辑:程序博客网 时间:2024/06/15 07:19
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
enum Light {RED, YELLOW, GREEN};
class TrafficLights
{
private Lock lock = new ReentrantLock();
private Condition red = lock.newCondition();
private Condition yellow = lock.newCondition();
private Condition green = lock.newCondition();
private Light light;
public TrafficLights(Light light){this.light = light;}
class RedLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.RED)
{
System.out.println("current is red , ready to turn green");
Thread.sleep(100);
light = Light.GREEN;
green.signal();
}
else
{
red.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
class YellowLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.YELLOW)
{
System.out.println("current is yellow, ready to turn red ");
Thread.sleep(100);
light = Light.RED;
red.signal();
}
else
{
yellow.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
class GreenLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.GREEN)
{
System.out.println("current is green , ready to turn yellow");
Thread.sleep(100);
light = Light.YELLOW;
yellow.signal();
}
else
{
green.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
}
public class Main6
{
public static void main(String[] args)
{
TrafficLights trafficLights = new TrafficLights(Light.GREEN);
TrafficLights.GreenLight greenLight = trafficLights.new GreenLight();
TrafficLights.YellowLight yellowLight = trafficLights.new YellowLight();
TrafficLights.RedLight redLight = trafficLights.new RedLight();
greenLight.start();
yellowLight.start();
redLight.start();
}
}
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
enum Light {RED, YELLOW, GREEN};
class TrafficLights
{
private Lock lock = new ReentrantLock();
private Condition red = lock.newCondition();
private Condition yellow = lock.newCondition();
private Condition green = lock.newCondition();
private Light light;
public TrafficLights(Light light){this.light = light;}
class RedLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.RED)
{
System.out.println("current is red , ready to turn green");
Thread.sleep(100);
light = Light.GREEN;
green.signal();
}
else
{
red.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
class YellowLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.YELLOW)
{
System.out.println("current is yellow, ready to turn red ");
Thread.sleep(100);
light = Light.RED;
red.signal();
}
else
{
yellow.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
class GreenLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.GREEN)
{
System.out.println("current is green , ready to turn yellow");
Thread.sleep(100);
light = Light.YELLOW;
yellow.signal();
}
else
{
green.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
}
public class Main6
{
public static void main(String[] args)
{
TrafficLights trafficLights = new TrafficLights(Light.GREEN);
TrafficLights.GreenLight greenLight = trafficLights.new GreenLight();
TrafficLights.YellowLight yellowLight = trafficLights.new YellowLight();
TrafficLights.RedLight redLight = trafficLights.new RedLight();
greenLight.start();
yellowLight.start();
redLight.start();
}
}
0 0
- Lock与Condition代替Synchronized
- java线程通讯——使用Lock和Condition代替synchronized 和 wait, notify notifyAll()
- 锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- Java线程同步synchronized,Lock,Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- Java锁机制:Synchronized,Lock,Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- Java线程---锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- 【Java线程】锁机制:synchronized、Lock、Condition
- C++ STL list对对象变量操作的一些总结
- svn 撤销已提交的错误修改
- 蓝鸥Unity开发基础——方法
- Android shape属性介绍
- cat、tail、head、grep、sed查看文件任意几行的数据
- Lock与Condition代替Synchronized
- 报错解决:-Dmaven.multiModuleProjectDirectory system propery is not set.
- Linux下Spark框架配置(Python)
- jquery
- 主机安全检测
- java--数据结构--8种排序算法
- make gnome-terminal simi-transparent
- 分辨率兼容
- 聚集索引和非聚集索引的区别