当前位置: 代码迷 >> J2SE >> singleThreadExecutor的意思
  详细解决方案

singleThreadExecutor的意思

热度:215   发布时间:2016-04-23 19:41:32.0
singleThreadExecutor的意义
Java中的singleThreadExecutor表示单线程池,就是这个线程池里面只有一个线程,那我想知道,这个对象存在的意义是什么?跟直接起一个线程有什么区别?

我的理解是不是单线程池的好处就是线程可以复用,将单线程池singleThreadExecutor声明成一个静态变量,完后在不同的A类,B类,C类中都可以在singleThreadExecutor的execute方法中去启动线程


singleThreadExecutor.execute(new Runnable() {
 
@Override
public void run() {

}
});


这里虽然每次都用了new Runnable关键字,但这几个线程其实都是同一个线程?是这样理解吗?



------解决思路----------------------
首先要弄情况一个Runnable并非是一个线程,一个Thread才是一个线程。
singleThreadExecutor内部会创建一个Thread,这个Thread的工作就是从一个队列中取出用户提交的任务进行执行,如果执行过程中发生未受检的异常,singleThreadExecutor会自动重新启动一个线程再继续工作,这一点比用户自己创建一个线程自己管理轻松多了。同时自己维护一个任务队列也不是件简单的事,所以singleThreadExecutor的意义还是很大的。
------解决思路----------------------
引用:
Quote: 引用:

简单说下线程池管理的线程的几点意义:
1、缓存线程、进行池化,可实现线程重复利用、避免重复创建和销毁所带来的性能开销。(如楼主理解的)
2、当线程调度任务出现异常时,会重新创建一个线程替代掉发生异常的线程。
3、任务执行按照规定的调度规则执行。线程池通过队列形式来接收任务。再通过空闲线程来逐一取出进行任务调度。即线程池可以控制任务调度的执行顺序。
4、可制定拒绝策略。即任务队列已满时,后来任务的拒绝处理规则。
以上意义对于singleThreadExecutor来说也是适用的。普通线程和线程池中创建的线程其最大的区别就是有无一个管理者对线程进行管理。


那这样说来,我感觉单线程就没意义了,如果是单线程也应该用singleThreadExecutor啊

引用:
简单说下线程池管理的线程的几点意义:
1、缓存线程、进行池化,可实现线程重复利用、避免重复创建和销毁所带来的性能开销。(如楼主理解的)
2、当线程调度任务出现异常时,会重新创建一个线程替代掉发生异常的线程。
3、任务执行按照规定的调度规则执行。线程池通过队列形式来接收任务。再通过空闲线程来逐一取出进行任务调度。即线程池可以控制任务调度的执行顺序。
4、可制定拒绝策略。即任务队列已满时,后来任务的拒绝处理规则。
以上意义对于singleThreadExecutor来说也是适用的。普通线程和线程池中创建的线程其最大的区别就是有无一个管理者对线程进行管理。


那这样说来,我感觉单线程就没意义了,如果是单线程也应该用singleThreadExecutor啊
想想现实生活中,除了牛刀外,为什么还需要菜刀,西瓜刀,铅笔刀,螺丝刀(好吧,这个不是刀)。
  相关解决方案