本帖最后由 薄炳鑫 于 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);
- }
- }
复制代码 这里面的是有三个线程在同时执行,会不会有可能定时器抢不到执行资格而不会让汽车移走呢?
|
|