是否有使用
ExecutorService e=Executors.newSingleThreadExecutor();
e.execute(callable)
e.shutdown()
任何成本损失相比:
new Thread(runnable).start()
是的,有一个 “惩罚”:在ExecutorService
将最有可能创建成本更高,因为它还为您提交的任务创建队列,并且创建一个队列读取在关闭之前失败,那么失败的线程将被替换为另一个,以便运行任何后续任务(所以这里有相当多的逻辑)。但是,您可能不希望在每次运行任务时创建一个ExecutiveService
......这可能不是ExecutorService
的最佳使用(更多内容参见下一个问题)。
如果一个Callable不是一个长的,并且永远不会多于一个实例运行它,那么使用-1-的代码是可以的?或者最好将ExecutorService作为静态的并在调用之间重用?
建议的使用ExecutorService
的是作为一个线程池,在那里你保持ExecutorService
周围,你不断提交任务,它只要你有任务提交。它可以是静态的或只是一个普通的成员,这是不相关的,高度依赖于你的需求/设计。即使您一次只运行一个实例(即,您只有一个单线程执行程序),但使用ExecutorService
仍然更有效,因为它重用了该线程,所以从长远来看,它会比创建为您提交的每项任务提供一个新线程。
如果我有几个任务......每个任务都有任何问题有执行者的服务或更好地有一个集中的吗?
没有问题,但效率低下,所以只需要一个集中的执行器服务。
如果执行程序没有关闭(),哪些资源会消耗执行程序?
我不认为你应该特别担心,特别是如果你在正确的上下文中使用Executor
,它将是最小的。