スレッドを一定期間のみ実行するベストプラクティスは何ですか? currentTime を簡単に確認して、しばらく作業した後にスレッドを閉じることができますが、それは正しい方法ではないと思います。
2705 次
3 に答える
3
何を達成したいのかにもよりますが、一般的に言えば、最初から時間を測定するというアプローチはそれほど間違っていません。
于 2012-06-23T14:17:21.323 に答える
2
次のようにコーディングします。
private static class MyTimerTask extends TimerTask {
private final Thread target;
public MyTimerTask(Thread target) { this.target = target; }
public void run() {
target.interrupt();
}
}
public void run() {
Thread final theThread = Thread.currentThread();
Timer timer = new Timer();
try {
timer.schedule(new MyTimerTask(theThread), 60000});
while(!theThread.interrupted()) {
....
}
} finally {
timer.cancel();
}
}
...これは、アドホックフラグの代わりに割り込みを使用することを除いて、ホバークラフトで説明されています。割り込みを使用すると、一部の I/O 呼び出しが割り込みによってブロック解除され、一部のライブラリがそれを尊重するという利点があります。
于 2012-06-23T15:24:40.687 に答える
2
Executors フレームワークについて誰も言及していないことに驚いています (そして深く失望しています) 。java.util.Timer
スケジュールされたタスクの「goto」としてタイマーフレームワーク(または少なくともクラス)を奪いました。
例えば、
// Start thread
final Thread t = new Thread(new Runnable(){
@Override
public void run(){
while(!Thread.currentThread().isInterrupted()){
try{
// do stuff
}
catch(InterruptedException e){
Thread.currentThread().interrupt();
}
}
}
});
t.start();
// Schedule task to terminate thread in 1 minute
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.schedule(new Runnable(){
@Override
public void run(){
t.interrupt();
}
}, 1, TimeUnit.MINUTES);
于 2012-06-23T16:10:31.663 に答える