是否有ExecutorService
允许现有线程执行执行而不是产生新线程?如果它是ScheduledExecutor,则为奖励。大多数执行程序产生工作线程来执行执行,但我希望工作线程成为我所在的现有线程。下面是我想象中的API:阻塞线程上是否存在ExecutorService?
while (!executor.isTerminated()) {
Runnable r = executor.take();
r.run();
}
这是类似的方式,SWT和JavaFX允许主线程分派事件,而不是摇摆,这就需要其自身的事件分派线程来催生来处理事件。
动机:我目前有很多地方在线程产生一个新的执行程序,然后调用awaitTermination()等待它完成。我想节省一些资源并保持堆栈轨迹不被分成两部分。
请注意,我不希望在execute(Runnable)
的调用者线程中执行任务的执行程序,这是this answer和Guava的MoreExecutors.sameThreadExecutor()
所做的。
请问['Executors.newSingleThreadExecutor()'](http://docs.oracle.com/javase/7/docs /api/java/util/concurrent/Executors.html#newSingleThreadExecutor%28%29)?或者['Executors.newScheduledThreadPool(1)'](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newScheduledThreadPool%28int%29)? – assylias
'take()'表示在你看到它的返回值为真后,假设的'Executor#isTerminated()'谓词的答案是否变为false? – seh
@seh据推测,'isTerminated'会读取一些'volatile'变量,这个变量可以被另一个线程改变,要求它终止。这是一个关于并发性的问题,毕竟:3 – Brian