2

scheduleAtFixedRateandのドキュメントでは、次のようにscheduleWithFixedDelay述べています。

タスクの実行で例外が発生した場合、後続の実行は抑制されます

私のタスクが何らかのネットワーク ジョブを実行するように設計されていて、ホストが見つからなかったと仮定します。タスクは再度実行されませんか? 次の瞬間にホストがオンラインに戻ることがあります。

ドキュメントが話していたのはRuntimeException、範囲外の配列インデックスなどのインスタンスであると仮定すると、タスクは二度と実行されませんか? 実行を続けさせたい場合はどうすればよいですか?

4

3 に答える 3

3

タスクは二度と実行されませんか?

それが「その後の実行を抑止する」ということですよね。

実行を続けさせたい場合はどうすればよいですか?

RuntimeExceptionsそれらから逃がさないでくださいErrors

于 2013-11-13T05:24:33.580 に答える
1

内部で例外をキャッチするのを忘れたときに、クラッシュがどこで発生しているのかわからないのは非常に面倒でしたRunnable。実際には、これらの例外をすべて無視する必要はありませんでした。この目的 のために、例外をログに記録し、必要に応じてそれらを伝播するラッパーであるCatchyRunnableクラスを作成しました。Runnable

executorService.submit(new CatchyRunnable(new Runnable() {
    @Override
    public void run() {
        throw new RuntimeException("log me");
    }
});

Factory Method パターンを適用することで、より簡潔な構文を使用できます。ラムダで使用することを計画しています。

executorService.submit(new CatchyRunnable(() -> {
     throw new RuntimeException("log me");         
});
于 2013-11-13T08:24:04.863 に答える