0

Runnable インターフェイスを実装するクラスがいくつかあります。それらのそれぞれは、個別の SingleThreadExecutor を介して実行されます。実行ルーチンを変更することはできません。別の Runnables を提供することしかできません。

他の Runnables の結果に応じて、Runnables でいくつかの操作を行う必要があります。つまり、他のすべてのランナブルがその実行ポイントに達した場合にのみ、run() メソッド内で何らかの操作を実行したいと考えています。または、同じことをしている Runnables の数が 10 未満の場合にのみ、run() メソッド内でいくつかのルーチンを実行したいと考えています。

私が見る唯一の解決策は、静的変数 CountDownLatch と Semaphore を同期させることです。

私はこれを実装しましたが、不明な理由で、いくつかのランナブルがラッチまたはセマフォを待っている場合、いくつかのランナブルから始めて、SingleThreadExecutor は次のランナブルでスレッドを開始しません。たとえば、7 つの Runnables は開始しますが、他のものは開始しません。

私の質問: 静的ラッチまたはセマフォで同期する私のスキームは正しいものですか?

4

1 に答える 1

0

これは一般的に、次の場合CyclicBarrierよりも便利です。CountDownLatch

  1. マルチスレッド操作は段階的または反復的に発生します。
  2. たとえば、前のマルチスレッド部分の結果を組み合わせるには、ステージ/反復の間にシングルスレッド操作が必要です。

詳細はこちらここでの

于 2012-09-06T07:59:10.403 に答える