ExecutorService
新しいスレッドを生成する代わりに、既存のスレッドが実行を実行できるようにするものはありますか?それがScheduledExecutorの場合はボーナス。ほとんどのエグゼキュータは実行を行うためにワーカースレッドを生成しますが、ワーカースレッドを現在の既存のスレッドにします。これが私が想像するAPIです:
while (!executor.isTerminated()) {
Runnable r = executor.take();
r.run();
}
これは、イベントを処理するために独自のイベントディスパッチスレッドを生成する必要があるSwingとは対照的に、SWTおよびJavaFXがメインスレッドにイベントのディスパッチを許可する方法に似ています。
動機:現在、スレッドが新しいエグゼキュータを生成し、それが終了するのを待つためにawaitTermination()を呼び出す場所がたくさんあります。いくつかのリソースを節約し、スタックトレースが2つに分割されないようにしたいと思います。
execute(Runnable)
の呼び出し元スレッドでタスクを実行するエグゼキュータは必要ないことに注意してください。これは、この回答とGuavaがMoreExecutors.sameThreadExecutor()
行うことです。