与えられた制限時間内に終了Runnable
しなければならないを構築しようとしています。
現在、スレッドjava.util.Timer
を中断するために使用しています。Runnable
Timer
開始直後にRunnable
開始します。
import java.util.Timer;
import java.util.TimerTask;
public class test {
Thread task;
Timer timer;
public void start(){
task = new Thread(new worker());
timer = new Timer("timer",true);
task.start();
timer.schedule(new Terminator(),1000*2);
}
class worker implements Runnable{
@Override
public void run() {
for (int i = 0 ; i < 2; i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Test Interrupted !!");
return;
}
}
System.out.println("Test Finished !!");
timer.cancel();
}
}
class Terminator extends TimerTask{
@Override
public void run() {
task.interrupt();
System.out.println("Test Terminated !!");
}
}
}
しかし、これによりTimer
、Runnable
スレッド
間の競合状態が発生する可能性があります。Runnable
完了間近であり、Timer
起動もしています。
これにより、両方が終了する可能性があります。と終了しました!! 印刷されていますか?もしそうなら、どのようにそれを回避しますか?
アップデート:
それは起こります:
11-09 21:14:40.741: INFO/System.out(31442): Test Finished !! 18
11-09 21:14:40.751: INFO/System.out(31442): Test Terminated !! 18
11-09 21:14:40.751: INFO/System.out(31442): Test Finished !! 19
11-09 21:14:40.751: INFO/System.out(31442): Test Terminated !! 19