ScheduledExecutorService
前のタスクがまだ終了していない場合、タスクの複数のスレッドを生成するために使用することに興味があります。たとえば、0.5 秒ごとにファイルを処理する必要があります。最初のタスクがファイルの処理を開始し、最初のスレッドが終了していない場合は 0.5 秒後に 2 番目のスレッドが生成され、2 番目のファイルの処理が開始されます。これは、次のような方法で実行できます。
ScheduledExecutorService executor = Executors.newScheduledThreadPool(4)
while (!executor.isShutdown()) {
executor.execute(task);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// handle
}
}
今私の質問:なぜ私はそれを行うことができないのexecutor.scheduleAtFixedRate
ですか?
私が得るのは、最初のタスクに時間がかかる場合、最初のタスクが終了するとすぐに2番目のタスクが開始されますが、エグゼキューターにスレッドのプールがあっても新しいスレッドは開始されません。executor.scheduleWithFixedDelay
明確です - タスクは同じ時間間隔で実行され、タスクを完了するのにどれだけ時間がかかるかは問題ではありません。ScheduledExecutorService
だから多分私は目的を誤解しました。
多分私は別の種類のエグゼキューターを見るべきですか?または、ここに投稿したコードを使用するだけですか? 何かご意見は?