【发布时间】:2017-05-23 12:31:45
【问题描述】:
我只需要执行一个能够取消它的线程。我发现我可以使用Future<T>s 来实现这一点。现在我像这样使用它:
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<Void> future = executorService.submit(copyCallable);
executorService.shutdown();
由于ExecutorServices 通常用于管理多个线程,我想知道是否有更有效的方法来实现这一点而无需创建一个。谢谢。
【问题讨论】:
-
ExecutorService不会帮助取消创建的线程,您必须自己管理。至于等待输出,你可以在调用者线程中调用new thread().join()。 -
在 android 类中 AsyncTask 就是为此而生的。通常一次只在gui线程外执行一个AsyncTask,AsyncTask.doInBackground()完成后在gui线程中执行AsyncTask.onPostExecute。
-
为什么要关心它是否高效?以你的方式做这件事看起来是对你的时间的有效利用。其他任何事情只会迫使您编写更多代码行,并且可能会迫使其他程序员有一天阅读更多代码行。您的程序的性能是否不尽如人意?如果没有,那为什么不停下来享受它呢?
-
@11thdimension 我假设
future.cancel(true)会神奇地停止线程,即使没有明确处理取消。经过一番研究,我发现我需要在Callable中自己处理取消,或者只使用常规线程并自己处理中断。我认为后一种方法比创建ExecutorService更有效。 -
@k3b 此操作运行时间较长,因此我选择创建自己的线程。
标签: java android multithreading future executorservice