1

ループA内で定期的なアクションを実行するスレッドがあります。次に、ユーザー入力をリッスンするwhile(running)別のスレッド があります。Bユーザーがボタンを押すと、スレッドBは新しいスレッドを生成してタスクを実行します (これを Thread のインスタンスと呼びましょうC)。このタスクには、インターネット経由での情報の送信が含まれ、最大 20 秒かかる場合があります。C一度に複数のアクティブなインスタンスが存在する可能性があります。

私が抱えている問題はこれです。A現在アクティブなタイプ「C」のスレッドがない場合にのみ、スレッドにそのコードを実行させたいと思います。より明確にするために、スレッド A は次のようになります。

 class ThreadA extends Thread{

      public void run(){
            while(running){
                performAction();
                Thread.sleep(1000);
            }
      }
 }

のインスタンスCが検出された場合、明らかに私はperformAction()呼び出されたくありません。スレッドが現在実行中の場合、performAction()現在の進行状況で実行を停止したいと思います。

スレッド A 内から生成されたスレッドの参照を取得する方法がわからないため、続行する方法がわかりません。

4

1 に答える 1

2

を使用しjava.lang.ThreadGroupます。静的な ThreadGroup を使用して ThreadC のすべてのインスタンスを構築することにより、ThreadC のすべてのインスタンスを維持し、 を使用してアクティブなインスタンスの数を取得できますThreadGroup#activeCount()public static ThreadC.threadGroupActiveCount( ) が呼び出されたときにフィールドが 0 を返す場合にのみ performAction() を呼び出す条件を ThreadA に追加するだけです。

于 2012-05-10T23:26:11.060 に答える