1

run()私は、他の多くのメソッドを実行するこのメソッドを持っています。これらのサブメソッドには、一部のサブメソッドで 1 ずつ増加するカウンターがあります。このカウンターが指定された数値に達するnと、メソッドrun()は未定の時間一時停止する必要があります。再度呼び出されると、一時停止する前に終了した場所から実行を開始する必要があります。

これはJavaで可能ですか?

編集:Andersojが尋ねたいくつかの詳細情報

私は自分のコードをたくさん取り除こうとしました。これは、その外観の非常に基本的な例です。

public void run(int n) {
   executeA();
}

public void executeA() {
   while (randomCondition) {
      executeB();
      counter++;
   }
   executeC();
   if (counter <= 100)
      executeD();
}

のコードはequalsexecuteA()まで実行する必要があります。どこで実行されるかは問題ではなく、一時停止する必要があります (これは.counternexecuteA()

しばらくしてrun()が再び呼び出されると、スレッドが で停止した場所からコードが再開されexecuteA()ます。

再度、感謝します!

4

1 に答える 1

1

停止と再開が特定の条件に基づいており、条件を変更する可能性のある他のスレッドによってメソッドがウェイクアップされると想定している場合(質問ではどの前提条件も明確ではありません):

public void run() {
   synchronized(mutex){
      while(condition){
         try {
            mutex.wait();
         }catch(InterruptedException e) {//...}
      }
      goOn();
   }
}

または、を使用して任意の時間待機することもできますmutex.wait(waitTime)

他のスレッドは、条件が変更されたときに待機中のスレッドをウェイクアップするか、待機時間が経過した後しばらくしてから再びウェイクアップします。その場合、条件が再評価され、条件が変更されていません。

public void run() {
   synchronized(mutex){
     if(condition){
         mutex.notify();
     }
   }
}
于 2012-05-12T16:02:10.793 に答える