2017-06-06 3 views
0

スイングワーカーを中断する必要がありますが、スレッドがフラグメントを実行している場合は、その後に割り込みが発生します。このような何か:Java - 割り込みからの保護SwingWorker

public class worker extends SwingWorker<Integer, String>{ 
    //(...) constructors and everything else 

    protected Integer doInBackground() throws Exception{ 
     //Code that can be interrupted 
     while(true){ 
      //(...) more code that can be interrupted 

      //This shouldn't be interrupted, has to wait till the loop ends 
      for(int i=0; i<10; i++){ 

      //(...) more code that can be interrupted 
     }    
    } 
} 

はと労働者の中断:

Worker worker = new Worker(); 
worker.execute(); 
worker.cancel(true); 

私はsynchronizedブロックを試してみましたが、それが動作しないか、私はちょうどそれが間違ってやっているかどうかわからないしました。

方法はありますか?ありがとう!

+0

[この回答](https://stackoverflow.com/a/671053/4756299)に記載されているように、スレッドは中断しません。制御された方法でスレッドを終了します。 –

答えて

0

どのような方法でも、スレッドを定期的にチェックするフラグで制御できます。 開始する前にフラグをチェックするか、割り込みしてから続行してください。以下のような揮発性

メイクフラグは、それがすべてのスレッドまたはAtomicBoolean

while (flag) { 
     //do stuff here 
    } 

に表示されますので、またはあなたがタスクをキャンセルするために、割り込みを使用することができます。

try { 
     while(!Thread.currentThread().isInterrupted()) { 
     // ... 
     } 
    } catch (InterruptedException consumed) 

    } 
関連する問題