あなたの状況は少しトリッキーで、コードスニペットで何が起こるかわかりません。タイマースレッドが例外をスローするまでメインスレッドがブロックされると思いますか?それは起こらないからです。実行する唯一のことは、スレッドによって定期的に実行されるコードではなく、try-catch
への呼び出しで発生する例外をキャッチすることです。schedule
とにかくそれは意味がありません。タイマースレッドはメインスレッドと並行して例外をスローする可能性があるため、例外をチェックするためにメインスレッドを定期的にフリーズするか、タイマーが終了するまでメインスレッドを永続的にフリーズする必要があります。
ScheduledThreadPoolExecutor
後者の場合は、 :を使用して簡単に実行できます。
ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);
ScheduledFuture f = exec.scheduleWithFixedDelay(new Task(arg1, arg2), 0,
RETRY_PERIOD, TimeUnit.MILLISECONDS);
...
try {
f.get(); // wait for task to finish
} catch(ExecutionException ex) {
System.out.println("Exception caught");
}
ここで、Task
はを実装するクラスですRunnable
。
もちろん、これにより、タスクが例外を返すかスローするまでメインスレッドがブロックされます(これは決して発生しない可能性があります)。または、timed getを使用して、例外を定期的にチェックすることもできます。