使用Executor接口而不是显式创建线程

时间:2012-11-21 14:49:16

标签: java multithreading concurrency

我已经读过使用Executor接口比明确创建自己的线程更好的编程习惯。在我看来,创建自己的线程并在Thread构造函数的参数中初始化它们要容易得多。使用Executor而不是按照我迄今为止的方式创建线程有什么好处?

3 个答案:

答案 0 :(得分:2)

创建线程是一项代价高昂的操作,因此最好将Thread返回给线程池。在为每个客户端请求分配线程的服务器中尤其需要这样做。

每次需要数百个请求并在每次需要时重新创建线程会对性能产生很大影响。

因此,在需要很少线程的情况下,您可以在没有Executor的情况下创建它们。如果您的应用程序可能会创建许多线程,请使用Executor。

答案 1 :(得分:1)

使用明确的Thread对象即可获得:并行运行的线程。使用ExecutorService即可获得:

  • 在任务执行之间回收的线程池。
  • 线程安全阻塞任务队列,线程自动检查新任务。
  • 隐式负载平衡。
  • 隐式效率,因为避免了线程创建开销。

ExecutorService可以轻松实现生产者 - 消费者范例。

答案 2 :(得分:0)

其中一个优点是线程将从池中使用,而不是每次都创建。

根据oracle concurrency tutorial

  

执行程序定义用于启动和管理线程的高级API。 java.util.concurrent提供的执行程序实现提供了适用于大规模应用程序的线程池管理