プログラマメモ2 - programmer no memo2

TimerTaskがとまる場合 2007/04/18

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);

}

}

: