私は、Javaで多数のシリアルディスパッチキューを管理する必要があります。それぞれが独自の実行ループを管理するために必要なエンジンモジュールがいくつかあります(そのうちのいくつかは非常に迅速に完了し、他のモジュールは長期間ブロックされる可能性があります)。各エンジンに提出されたジョブは、順番に実行する必要があります。ExecutorsをJavaで使用するシリアルディスパッチキュー?
理想的には、各エンジンにはスレッドが0から1の間でスケーリングされる単一のスレッドプールがあり、数百ものイベントが発生した場合、ExecutorServiceはシリアルとなり、 。
しかし、私はいずれかを使用しようとしたとき:
new ThreadPoolExecutor(0, 1, 30L, TimeUnit.SECONDS, new SynchronousQueue<>());
または
new ThreadPoolExecutor(1, 1, 30L, TimeUnit.SECONDS, new SynchronousQueue<>());
私は(最初のジョブがまだ実行されている場合)は、第2のジョブが送信されたときにRejectedExecutionException
があることがわかり
これを独自のキューで実装して、オンデマンドで自分のThread
インスタンスを開始/停止/破棄することができますが、これはExecutorが行うことができるようなものです。
キャッシュされたスレッドプールを作成する方法(またはExecutorの実装)はありますか?ジョブがなくても期限切れになり、終了することができます。