Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 您是否应该始终使用ExecutorService而不是启动自己的线程?_Java_Multithreading - Fatal编程技术网

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

Java 您是否应该始终使用ExecutorService而不是启动自己的线程?,java,multithreading,Java,Multithreading,在JDK>=1.5的情况下,启动线程的首选方式应该始终是Executor还是Executor服务,或者如果您不需要Executor服务提供的内容,是否仍然有理由选择使用thread.start 对于syncronized,我曾经认为使用新的锁实现是首选,直到我。所以我对遗嘱执行人也有同样的想法。它们只是处理更复杂案件的一种方式,还是应该成为标准选择?至少在第6.2节中明确指出: Java类库中任务执行的主要抽象不是Thread,而是Executor。[……] 使用执行器通常是在应用程序中实现生产

在JDK>=1.5的情况下,启动线程的首选方式应该始终是Executor还是Executor服务,或者如果您不需要Executor服务提供的内容,是否仍然有理由选择使用thread.start

对于syncronized,我曾经认为使用新的锁实现是首选,直到我。所以我对遗嘱执行人也有同样的想法。它们只是处理更复杂案件的一种方式,还是应该成为标准选择?

至少在第6.2节中明确指出:

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

使用执行器通常是在应用程序中实现生产者-消费者设计的最简单方法


就我个人而言,自Java5以来,我完全没有使用
Thread
ThreadGroup
,因为它们提供的定制和功能比
ExecutorService
少得多


使用
ExecutorService
时,我知道我可以使用
Callable
,我知道我可以(稍微增加一点开销)安排重复的任务。因此,我认为“代码<线程> <代码>对象禁止代码,如<代码>向量< /代码>和<代码>哈希表是直接的。

编写正确的多线程代码是非常困难的。Executor框架的美妙之处在于,它实现了开发人员将遇到的大部分繁重任务,并且只需要实现可调用或Future,并对java.util.concurrent API进行编程。由于正确管理线程的复杂性,IMHO可以产生更可读的代码,并且错误地实现它的机会更少。

这两个答案都很好,但我必须给出一个公认的答案,与Vector和Hashtable进行比较。