黑马程序员技术交流社区

标题: 关于构造函数中的线程问题 [打印本页]

作者: Peach2014    时间: 2014-8-25 17:48
标题: 关于构造函数中的线程问题
本帖最后由 Peach2014 于 2014-8-25 17:51 编辑

张孝祥老师7K面试一中的交通信号灯中,Road类中的代码如下
  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Random;
  4. import java.util.concurrent.ExecutorService;
  5. import java.util.concurrent.Executors;
  6. import java.util.concurrent.ScheduledExecutorService;
  7. import java.util.concurrent.TimeUnit;

  8. public class Road {
  9. private List<String> vechicles = new ArrayList<String>();
  10. private String name = null;
  11. public Road(String name){
  12. this.name = name;
  13. ExecutorService pool =Executors.newSingleThreadExecutor();
  14. //执行一个线程
  15. pool.execute(new Runnable(){
  16. public void run(){
  17. for(int i = 1; i < 1000; i++){
  18. try {

  19. Thread.sleep((new Random().nextInt(10) + 1) * 1000);
  20. } catch (InterruptedException e) {
  21. e.printStackTrace();
  22. }
  23. vechicles.add(Road.this.name + "_" + i);
  24. }
  25. }
  26. });
  27. //启动一个定时器
  28. ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
  29. timer.scheduleAtFixedRate(
  30. new Runnable(){
  31. public void run(){
  32. if(vechicles.size() > 0){
  33. boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
  34. if(lighted){
  35. System.out.println(vechicles.remove(0) + " is traversing!");
  36. }
  37. }
  38. }
  39. },
  40. 1,
  41. 1,
  42. TimeUnit.SECONDS);
  43. }
  44. }
复制代码
在构造函数中程序的线程池中的代码没有执行完,为什么定时器中的代码也可以同时执行。
这是一个什么样的机制。构造函数中的代码不应该是从上往下执行的吗?在Sleep的时候后面的代码不是应该会阻塞吗?
不是很理解,求大神指导!







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2