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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

执行者似乎是一个clean抽象。您何时想直接使用线程而不是依赖更强大的执行程序?

提问于
用户回答回答于

为了提供一些历史记录,仅在Java 1.5中添加了作为Java标准一部分的执行程序。所以在某些方面,Executors可以被看作是处理Runnable任务的一个新的更好的抽象。

有点过分简化... - 执行程序是正确的线程,所以优先使用它们。

用户回答回答于

当我需要一些基于拉的消息处理时,我使用Thread。例如,一个Queue被take() - 在一个单独的线程循环中。例如,你在一个昂贵的上下文中封装了一个队列 - 可以说一个JDBC连接,JMS连接,从单个磁盘处理的文件等等。

正如其他人所说的,ExecutorExecutorService)接口具有更大的潜力,因为您可以使用它Executors来选择一种行为:在Java 5+中进行计划,优先化,缓存等,或者为Java 1.4提供一个juc backport。

执行器框架具有防止崩溃的可运行程序的保护并自动重新创建工作线程。在我看来一个缺点,那你必须明确地shutdown()awaitTermination()他们退出应用程序之前-这是不是在GUI应用程序那么容易。如果你使用有界队列,你需要指定一个RejectedExecutionHandler或新的runnables被扔掉。

可能会看看Brian Goetz等人:Java Concurrency in Practice(2006)

扫码关注云+社区