黑马程序员技术交流社区
标题:
交通灯系统中关于Executors类的方法问题
[打印本页]
作者:
黑马11期李项京
时间:
2012-6-3 23:03
标题:
交通灯系统中关于Executors类的方法问题
本帖最后由 黑马11期李项京 于 2012-6-3 23:32 编辑
经过本人试验:Executors.newSingleThreadScheduledExecutor()和
Executors.newScheduledThreadPool(1);产生效果其实是一样的,可以互相替换,那张老师为什么不用同一个线程方法呢?
张老师的代码:
//模拟车辆不断随机上路的过程
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){
public void run(){
for(int i=1;i<1000;i++){
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i);
}
}
});
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
if(vechicles.size()>0){
boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
if(lighted){
System.out.println(vechicles.remove(0) + " is traversing !");
}
}
}
},
1,
1,
TimeUnit.SECONDS);
}
复制代码
作者:
刘伯阳
时间:
2012-6-3 23:20
两个方法的比较:
newSingleThreadExecutor: 产生一个ExecutorService对象,这个对象只有一个线程可用来执行任务,若任务多于一个,任务将按先后顺序执行。
newScheduledThreadPool(int poolSize): 产生一个ScheduledExecutorService对象,这个对象的线程池大小为poolSize,若任务数量大于poolSize,任务会在一个queue里等待执行
在只有一个线程的时候,他们的作用是一样的。
至于为什么张老师采用newScheduledThreadPool(int poolSize)的方法,我想是为了以后程序在功能扩展的时候更加方便。
作者:
杜俊彪
时间:
2012-6-3 23:24
异曲同工之妙;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2