ScheduledExecutorServiceを使用して定期的に実行するためにRunnableをスケジュールし、OutOfMemoryのようなシステムエラーが発生したとします。それは静かに飲み込まれます。ScheduledExecutorService throwable lost
scheduler.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
throw new OutOfMemoryError(); // Swallowed
}
}, 0, delay, TimeUnit.SECONDS);
正常ですか?
なぜそれがコンテナに伝播しないのですか?
このようなエラーを処理する正しい方法は何ですか?
ありがとうございます!
繰り返し可能なタスクをスケジューリングした後にfuture.get()を呼び出すようにアドバイスしますか?しかし、それは眠っているスレッドの作成を引き起こします。大丈夫ですか? –
さて、仕事が完了するまで例外が投げられたかどうかは分からないので、何らかの理由でそれが成功するか、失敗するか(例外またはエラーを投げる)待たなければなりません。タイムアウト0でgetを呼び出すと、ジョブがまだ実行中の場合、メソッドはTimeoutExceptionをスローします。返されたFutureのステータスを問い合わせるためにスレッドをブロックする必要はありません。 – jarnbjo