2012-05-12 10 views
1

私はこのメソッドをrun()としています。このメソッドは他の多くのメソッドを実行します。これらのサブメソッドには、いくつかのサブメソッドで1ずつインクリメントするカウンタがあります。このカウンタが所定の数nに達すると、方法run()は、未定義の時間の間、一時停止する必要があります。再度呼び出されると、一時停止する前に実行を開始する必要があります。メソッドが再び呼び出されるまでメソッドを一時停止する

これはJavaで可能ですか?

編集:Andersoj

に頼まいくつかのより多くの情報として、私は私のコードをたくさんダウンストリップしようとしました。これは、それがどのように見えるかの非常に基本的な例です。 counternに等しくなるまで

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

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

executeA()でコードが実行される必要があります。スレッドは以前executeA()で停止した場所、それが実行された場合、それは一時停止しなければならないまで、それは問題ではありません(これはexecuteA()のどこにでも発生する可能性があります。

をしばらくして、run()が再び呼び出され、コードが再開する必要があります。

お返事ありがとうございました

+0

これはスレッドの質問のように聞こえますが、これは正しい仮定ですか? –

+0

@GregFlynn、私はスレッドについて考えましたが、 'run()'メソッドが一時停止されても、他のメソッドは引き続き実行できるはずです。 – gieldops

+0

コンテキストスイッチについて説明しているので、スレッディングなしでは可能ではないと思います。 –

答えて

1

停止と再開が特定の条件に基づいており、条件が変更される可能性のある他のスレッドによってメソッドが起動されたと仮定すると(いずれの施設もあなたの質問では明確ではありません) :

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

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

条件が変更されたときに他のスレッドが待機スレッドを呼び起こすか、待機時間が経過してからもう一度起動します。この場合、条件が再評価され、再び待機状態に入ることがあります条件が変更されていない場合

+0

条件は、スレッドが一時停止されるべき時を決定します。 'run()'のもう1つの呼び出しは、スレッドを再び開始する必要があります – gieldops

+0

@gieldlあなたのステートメントを詳述できますか? 「スレッドをもう一度開始する」とは何を参照しているのかわからないため、Javaでスレッドを再起動する方法はありません。特定のスレッドの実行を再開することを参照すると、2番目のコードスニペットに示すようにこのスレッドに通知されるまでは発生しません。 –

+0

もう一度。はい、 'run()'で始まったスレッドの実行を再開することを意味していました。 – gieldops

関連する問題