使用JDK> = 1.5时,启动线程的首选方法是始终是Executor还是Executor Service,还是仍然有理由在不需要ExecutorService提供的内容时更喜欢使用Thread.start?
对于同步,我曾经认为使用新的Lock实现是首选,直到我explained otherwise。所以我想知道关于Executors的同样的事情。它们只是处理更复杂案例的一种方式,还是它们应该成为标准选择?
答案 0 :(得分:10)
Java Concurrency in Practice至少在第6.2节中明确说明:
Java类库中任务执行的主要抽象是不是
Thread
,而是Executor
。 [...]使用Executor通常是在应用程序中实现生产者 - 消费者设计的最简单途径。
答案 1 :(得分:10)
就个人而言,自从Java 5以来,我完全遗留了Thread
和ThreadGroup
,因为它们提供的自定义和功能少于ExecutorService
。
使用ExecutorService
时,我知道我可以使用Callable
,我知道我可以(有一点开销)安排重复的任务。因此,我考虑直接实例化Thread
对象已弃用的代码,因为Vector
和Hashtable
是。
答案 2 :(得分:2)
编写正确的多线程代码非常困难。 Executor框架的优点在于它实现了开发人员将遇到的大部分繁重工作,并且只需要实现Callable或Future并编程到java.util.concurrent API。恕我直言,由于正确管理线程的复杂性,它导致代码更易读,并且错误地实现它的机会更少。