黑马程序员技术交流社区
标题:
求形象解释,关于并发类Executors的小问题***力求用自己的语言哦,不要百度的
[打印本页]
作者:
金龙
时间:
2012-8-2 13:14
标题:
求形象解释,关于并发类Executors的小问题***力求用自己的语言哦,不要百度的
Executors.newSingleThreadExecutor()和Executors.newScheduledThreadPool(1)的区别?不只是简单的理解为第一个是单线程,第二个是线程池中只有一个线程吧?
作者:
胡文凡
时间:
2012-8-2 13:39
首先,很明显的区别是Executors.newScheduledThreadPool(1)它可安排在给定延迟后运行命令或者定期地执行。两个方法返回的结果都不同。
作者:
黑马-王言龙
时间:
2012-8-2 13:42
你猜对了。就这么简单,名称长的吓人。
newSingleThreadExecutor():创建一个只有单线程的线程池。返回类型是ExecutorService对象,该对象代表一个线程池。用于执行Runnable内的run。
第二个一样,创建指定数目线程的线程池。系统随机选择一个空闲的线程执行Runnable内的run。
该对象可以用于指定延迟后再周期性的执行线程内容。
第一个不具备延迟功能,也没有周期执行功能(额外添加的不算)。
这里有张老师的交通灯示例,我加了注释:
//定时器:每10秒钟将当前灯变红,并且将下一个灯变绿;
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
//周期要做的事
new Runnable(){
@Override
public void run() {
System.out.println(System.currentTimeMillis());
//返回的下一个灯作为当前灯
currentLamp = currentLamp.lightOut();
}
},
10, //第一次执行的延迟时间
10, //周期为10秒
TimeUnit.SECONDS//周期的单位
);
复制代码
张老师的
作者:
吴立杰
时间:
2012-8-2 16:04
你是不是要说Executors.newSingleThreadExecutor()和Executors.new FixedThreadPool(1)的区别啊?
这两个是等效的,但是有区别,下面给你解释一下,本人的一点小见解,希望大家共同交流
楼主首先应该明确:
线程池中有三类池子:
cache池子-->newCachedThreadPool;设置有定时清除池中超过60s(默认)的线程,
所以这个池中的线程可以不用担心它线程是否结束
fixed池子-->newFixedThreadPool;newFixedThreadPool与cacheThreadPool差不多,
也是能reuse就用,但不能随时建新的线程 -其独特之处:任意时间点,最多只能有
固定数目的活动线程存在,此时如果有新的线程要建立,只能放在另外的队列中等待,
直到当前的线程中某个线程终止直接被移出池子
Scheduled池子-->newScheduledThreadPool;这个调度线程池子中的线程可以按照Schedule设置的周期依次执行。
而newSingleThreadExecutor()-->为单例线程,即任意时间点,线程池中只能有一个线程在活动,
它使用的线程池使用的是底层池,这个底层池和cache池、fixed池这个两个池子使用了相同的底层池。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2