黑马程序员技术交流社区
标题:
在交通灯管理系统中想到一个问题
[打印本页]
作者:
薄炳鑫
时间:
2012-7-17 18:20
标题:
在交通灯管理系统中想到一个问题
本帖最后由 薄炳鑫 于 2012-7-17 23:26 编辑
public class Road
{
private List<String> vechicles = new ArrayList<String>();
private String name = null;
public Road(String name)
{
this.name = name;
// 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable()
{
// 模拟到达路口的汽车
@Override
public void run()
{
for (int i = 1; i < 1000; i++)
{
try
{
Thread.sleep(new Random().nextInt(10) * 1000);// 随机函数,实现在一到十秒过来一个汽车
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
vechicles.add(Road.this.name + "——" + i);// 向容器中添加小汽车。
}
}
});
// 一个定时器,模拟灯亮以后汽车一个一个的开走。
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable()
{
@Override
public void run()
{
if (vechicles.size() > 0)
{
boolean lighted = Lamp.valueOf(Road.this.name).isLighted();// 获取当前灯的状态。
if (lighted)
System.out.println(vechicles.remove(0) + "is traveling");// 将汽车从路口移走。
}
}
}, 1, 1, TimeUnit.SECONDS);
}
}
复制代码
这里面的是有三个线程在同时执行,会不会有可能定时器抢不到执行资格而不会让汽车移走呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2