【发布时间】:2013-04-13 22:20:42
【问题描述】:
在过去的几个小时里,我读了很多关于它的文章,但我根本看不出有任何理由(有效理由)在 ExecutorService 上致电 shutdown(),除非我们有一个巨大的应用程序,存储了数十种很长时间未使用的不同执行器服务。
唯一的事情(据我所知)关闭所做的就是做一个普通线程在完成后所做的事情。当普通的 Thread 完成 Runnable(或 Callable)的 run 方法后,会被传递给 Garbage Collection 进行收集。使用 Executor Service,线程将被搁置,不会为垃圾收集打勾。为此,需要关机。
好的,回到我的问题。是否有任何理由经常在ExecutorService 上调用关机,甚至在提交一些任务后立即调用它?我想留下有人正在这样做的情况,然后立即致电awaitTermination(),因为这是经过验证的。一旦我们这样做了,我们必须重新创建一个新的ExecutorService,来做同样的事情。 ExecutorService 的全部想法不是重用线程吗?那么为什么这么快就销毁ExecutorService呢?
简单地创建ExecutorService(或根据您需要多少个),然后在应用程序运行期间将任务传递给他们,然后在应用程序退出或一些其他重要阶段关闭这些执行器?
我想从一些使用 ExecutorServices 编写大量异步代码的经验丰富的程序员那里得到答案。
第二个问题,与 android 平台有关的小一点的交易。如果你们中的一些人会说每次都关闭执行程序并不是最好的主意,并且你的程序在 android 上,你能告诉我当我们处理不同的事件时你如何处理这些关闭(具体来说 - 当你执行它们时)应用程序生命周期。
由于 CommonsWare 评论,我将帖子设为中立。我真的没有兴趣争论到死,而且似乎它正在导致那里。我只对了解我在这里向经验丰富的开发人员提出的问题感兴趣,他们是否愿意分享他们的经验。谢谢。
【问题讨论】:
-
“我多次看到示例代码,其中一直存在在提交或执行任务之后的 shutdown() 调用”——随意使用超链接来提供您的声明的证据。就个人而言,我从未见过任何按照您所说的“示例代码”。您可能会误解某些内容,如果我们知道您正在检查哪些“示例代码”,我们只能向您指出这一点。
-
嗨 CommonsWare。首先,我看到你(或看起来)对我的攻击性语气,我认为这里没有得到证实。我并没有试图以消极的方式描绘人们。至于你的引述,我主要是在谈论 Thinking In Java IV 版本,多任务部分。您可以在 Bruce Eckel 的示例中找到很多这样的例子。它们大多很简单,但布鲁斯给我的印象是经常使用关机。无论如何,您关注的不是我帖子的主要部分。我删除了这些部分,因为我真的不想为此争论。
-
hay @CommonsWare in Thinking in java book by Bruce Eckel..in concurrency/Executor page 804 Fourth Edition ,他总是在简单应用程序中提交或执行任务后立即使用shutdown()方法来说明Executor如何正如卢卡斯所说的那样工作
-
我知道这是一篇旧帖子,但我认为 OP 的问题仍然存在并且有效。我还遇到了许多示例代码,其中“在 execute() 之后有一个 shutdown() 调用”。 tutorials.jenkov.com/java-util-concurrent/executorservice.html(谷歌“java executorservice example”时出现的第一个教程)
-
谢谢,我遇到了与这些“示例代码”相同的问题。 journaldev.com/2340/…
标签: java android executorservice