A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 薄炳鑫 黑马帝   /  2012-7-17 18:20  /  1112 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 薄炳鑫 于 2012-7-17 23:26 编辑
  1. public class Road
  2. {

  3. private List<String> vechicles = new ArrayList<String>();

  4. private String name = null;

  5. public Road(String name)
  6. {

  7. this.name = name;
  8. // 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
  9. ExecutorService pool = Executors.newSingleThreadExecutor();
  10. pool.execute(new Runnable()
  11. {

  12. // 模拟到达路口的汽车
  13. @Override
  14. public void run()
  15. {

  16. for (int i = 1; i < 1000; i++)
  17. {
  18. try
  19. {
  20. Thread.sleep(new Random().nextInt(10) * 1000);// 随机函数,实现在一到十秒过来一个汽车
  21. }
  22. catch (InterruptedException e)
  23. {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. }
  27. vechicles.add(Road.this.name + "——" + i);// 向容器中添加小汽车。
  28. }
  29. }
  30. });

  31. // 一个定时器,模拟灯亮以后汽车一个一个的开走。
  32. ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
  33. timer.scheduleAtFixedRate(new Runnable()
  34. {

  35. @Override
  36. public void run()
  37. {

  38. if (vechicles.size() > 0)
  39. {
  40. boolean lighted = Lamp.valueOf(Road.this.name).isLighted();// 获取当前灯的状态。
  41. if (lighted)
  42. System.out.println(vechicles.remove(0) + "is traveling");// 将汽车从路口移走。
  43. }
  44. }
  45. }, 1, 1, TimeUnit.SECONDS);
  46. }



复制代码
这里面的是有三个线程在同时执行,会不会有可能定时器抢不到执行资格而不会让汽车移走呢?

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马