我们什么时候应该使用Java的Thread over Executor?

2022-08-31 17:21:34

Executor似乎是一个干净的抽象。您何时希望直接使用Thread而不是依赖更强大的执行器?


答案 1

为了提供一些历史,执行器只是作为Java 1.5中java标准的一部分添加的。因此,在某些方面,Executors可以被视为处理Runnable任务的新的更好的抽象。

有点过度简化即将到来... - 执行器是正确完成的线程,因此请优先使用它们。


答案 2

当我需要一些基于拉取的消息处理时,我使用线程。例如,队列在单独线程中的循环中是 take()-en。例如,您将队列包装在昂贵的上下文中 - 假设 JDBC 连接、JMS 连接、要从单个磁盘处理的文件等。

在我被诅咒之前,你有一些情况吗?

编辑

正如其他人所说,()接口具有更大的潜力,因为您可以使用来选择一种行为:Java 5+中的调度,优先级,缓存等或Java 1.4的j.u.c向后移植。ExecutorExecutorServiceExecutors

执行器框架具有针对崩溃的可运行对象的保护,并自动重新创建工作线程。在我看来,一个缺点是,在退出应用程序之前,您必须显式地使用它们 - 这在GUI应用程序中并不容易。如果使用有界队列,则需要指定 a,否则新的 runnable 将被丢弃。shutdown()awaitTermination()RejectedExecutionHandler

你可以看看Brian Goetz等人:Java Concurrency in Practice(2006)


推荐