您是否应始终使用ExecutorService而不是启动自己的线程?

时间:2010-07-13 12:49:15

标签: java multithreading

使用JDK> = 1.5时,启动线程的首选方法是始终是Executor还是Executor Service,还是仍然有理由在不需要ExecutorService提供的内容时更喜欢使用Thread.start?

对于同步,我曾经认为使用新的Lock实现是首选,直到我explained otherwise。所以我想知道关于Executors的同样的事情。它们只是处理更复杂案例的一种方式,还是它们应该成为标准选择?

3 个答案:

答案 0 :(得分:10)

Java Concurrency in Practice至少在第6.2节中明确说明:

  

Java类库中任务执行的主要抽象是不是 Thread,而是Executor。 [...]

     

使用Executor通常是在应用程序中实现生产者 - 消费者设计的最简单途径。

答案 1 :(得分:10)

就个人而言,自从Java 5以来,我完全遗留了ThreadThreadGroup,因为它们提供的自定义和功能少于ExecutorService

使用ExecutorService时,我知道我可以使用Callable,我知道我可以(有一点开销)安排重复的任务。因此,我考虑直接实例化Thread对象已弃用的代码,因为VectorHashtable是。

答案 2 :(得分:2)

编写正确的多线程代码非常困难。 Executor框架的优点在于它实现了开发人员将遇到的大部分繁重工作,并且只需要实现Callable或Future并编程到java.util.concurrent API。恕我直言,由于正确管理线程的复杂性,它导致代码更易读,并且错误地实现它的机会更少。