2016-06-01 5 views
0

私はRunnableを実装するClassを持っています。スレッドでこのクラスを使用していて、一時停止しようとしていて、何らかの種類のbooleanフラグを使用して再開します。これは私のコードです:Runnableクラスを使用

class pushFiles implements Runnable{  
    private volatile boolean running = true; 

    public void run() { 
     . 
     . some code 
     . 
     while (running){ 
      . 
      . more code 
      . 
     } 
    } 

    public void stop() { 
     running = false; 
    } 

    public void start() { 
     running = true; 
    } 
}; 

私はstopメソッドを使用してスレッドを一時停止してstart方法を使用して、それを再起動しようとしています。

stopメソッドは実際にはスレッドを停止/一時停止しますが、startメソッドでは再び実行されません。私が使用するスレッド初期化するとき

runnable = new pushFiles(); 
thread = new Thread(runnable); 
thread.start(); 

を私が間違って何をしているのですか?スレッドをポーズ解除することは可能ですか? どうすればいいですか?

+3

を使用して、あなたの' while'ループは 'Thread'がit'sの実行が終了した終了します。 Sidenode:Javaの命名規則に従い、クラス名を大文字で開始してください。 – SomeJavaGuy

+0

だから私は同じクラスのための新しいスレッドを作成する必要がありますか? –

+1

@DanyLavrov他の類似の質問に[この回答](http://stackoverflow.com/a/37565875/889583)を参照してください。私はちょうどそれを掲示し、ここにあなたのコードに基づいています。 – megaflop

答えて

3
while (running){ 
      . 
      . more code 
      . 
     } 

runningが偽のときに、あなたのrun()方法でしょう終了とあなたのスレッドはもうできなくなります。

Here's an example of how to do what you want、あなたはfalseに `running`を設定した場合、あなたが実際に実行を一時停止ドントwait()/notify()

+0

あなたのスレッドは既に終了しています –

+0

私は1つのスレッドしか持っていません。それが間違っていると、どのスレッドがnotifyメソッドを使用しますか? –

+1

あなたは2つのスレッドを持っていますか?これをインスタンシエートしてこのスレッドを実行した1つと1つ –

関連する問題