BlockingQueue
はRunnable
です。すべてのタスクをTaskExecutor
の実装の1つを使用して実行するだけで、すべてが並行して実行されます。 しかし、Runnable
の一部は他人に依存しているため、Runnable
が完了したら待つ必要があることを意味し、実行することができます。Spring TaskExecutorフレームワークでスレッドを管理する方法
ルールは非常に単純です:すべてRunnable
にコードがあります。同じコードを持つ2つのRunnable
は同時に実行することはできませんが、コードが異なる場合は並列に実行する必要があります。 つまり、すべての実行中のRunnable
は異なるコードを持つ必要があり、すべての「複製」が待機する必要があります。
問題は、スレッドが終了したときにイベント/メソッド/ものがないことです。私ができる は、すべてのRunnable
に、このような通知を建てたが、それだけでスレッドが終了する前に行われますので、それは
java.util.concurrent.ThreadPoolExecutor
終了方法afterExecute
を持っていないの後、私は、このアプローチが好きではないが、それが実装する必要があります - 春デフォルト実装のみを使用し、このメソッドは無視されます。
Runnable
が既に実行中(この情報へのアクセスは実装されていません)と、コードが重複しているため延期されている2つの追加コレクションを追跡する必要があるため、複雑になります。
私はBlockingQueue
のようにポーリングがないので、新しいものがキューに入ったときにスレッドをアクティブにするだけです。しかし、おそらくRunnable
の間のそのような依存関係を管理するためのより良いアプローチがあるので、私はBlockingQueue
をあきらめて別の戦略を使用する必要がありますか?
私はこの最初のアプローチが似ていますが、必要でないときにExecutorServiceが破棄された方が良いでしょう。 – Marx