黑马程序员技术交流社区

标题: 关于交通管理系统一个小问题 [打印本页]

作者: 一碗小米周    时间: 2013-9-22 19:58
标题: 关于交通管理系统一个小问题
本帖最后由 一碗小米周 于 2013-9-22 21:07 编辑

看了张老师的交通灯的视频,我想请问下各位,为什么Thread.sleep()不能直接放在构造方法中,需要独立创建一个线程?谢谢。

作者: 一碗小米周    时间: 2013-9-22 19:59
  1. public class Road {
  2.         private List<String> vehicle = new ArrayList<String>();
  3.         private String  name = null;
  4.         public Road(final String name){
  5.                 this.name = name;
  6.                 ExecutorService pool = Executors.newSingleThreadExecutor();
  7.                 pool.execute(new Runnable() {
  8.                     public void run() {
  9.                             for(int i =1;i<100;i++){
  10.                                      try {
  11.                                         Thread.sleep((new Random().nextInt(10)+1)*1000);
  12.                                 } catch (InterruptedException e) {
  13.                                        
  14.                                         e.printStackTrace();
  15.                                 }
  16.                                     vehicle.add(name+"--"+i);
  17.                                   }
  18.                                
  19.                         }
  20.                 });
复制代码

作者: 胡智    时间: 2013-9-22 20:41
Thread.sleep()是让运行该代码的线程暂停。构造函数是给类初始化的,只运行一次。把它放在构造函数里面,创建Road对象的时候,是主函数创建,主线程会暂停。主线程暂停了就不能运行其它的代码了。
在构造函数里面用线程池的技术,是建立完对象后,也同时建立了一个线程,然其运行我们想要它运行的代码。这就比你让Road类继承Thread类或实现Runnable方法,然后建立对象,然后启动线程要简便多了。




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