TimerTaskがとまる場合
2007/04/18
java
java.util.TimerTaskが実行中にrunで例外が発生すると、スケジュールがとまります。
ですので、どんな場合でも動作させたい場合には、内部で適切に例外をトラップする必要があります。
ちなみに、Errorがおきた場合はどうしたほうがよいのでしょうか。
例外はトラップするがErrorがおきる場合はよほどのことなので、トラップしないようにするというのが一般的かもしれません。
が、たまに、アプリケーションがとまる場合にこのErrorがおきていたというケースがあります。
ですので、Errorはキャッチしつつ、そしてそのまま返すというのがよいかもしれません。
経験上はまったことがあるのが、LinkageErrorです。ネイティブなライブラリとのリンクでおきるエラーなのですが、何故か、アプリケーションがとまるということがおきて、このLinkageErrorを考慮に入れてなかったということがありました。
だからといってThrowableでキャッチという方法はおすすめしません。可能なかぎり、個別のエラー、例外、実行時例外でcatchすべきです。最上位では、catchできないということがないようにThrowableでcatchするようにするというのがよいと、現時点では考えています。
以下、
タイマーをとめるコードサンプルです。
import java.util.Timer;
import java.util.TimerTask;
public class TestTimer {
public static void main(String[] args) {
Timer timer = new Timer(false);
TimerTask timerTask = new TimerTask() {
public void run() {
System.out.println("OK");
if (true)
throw new Error();
}
};
timer.schedule(timerTask, 1000, 1000);
}
}
: