私は、一定時間後に複数のスレッドを使用して、ScheduledExecutorServiceを使用してJavaアプリケーションを使用しています。 1時間に1つのスレッドが起動し、何らかの作業が行われ、正しく終了します。しかし、時には(例えば、HTTPリクエストが機能しないとき)、このスレッドはクラッシュし、エグゼキュータ・サービスはそのようなスレッドをこれ以上開始しません。それから、アプリケーションを終了し(Ctrl-Cを使用して)、もう一度それを再起動する必要があります。スレッドがクラッシュした後にJavaアプリケーションが正しく動作しない
クラッシュするスレッドが新しいスレッドをインスタンス化するためにExecutorServiceを中断する可能性はありますか? アプリケーションがまだ動作しているかどうかは、自分のRaspberry Piで動作しているため、24時間365日実行する必要があるため、常に確認したくありません。
多分私の問題の解決策を見つけるのを助けることができます!
EDIT:
ExecutorServiceのは、独自のスレッドで実行されます。これは、スレッドが開始されている方法です。
@Override
public void run() {
threadFuture = executorService.scheduleAtFixedRate(new IntervalThread(i, p, c, a), 60, 60, TimeUnit.MINUTES);
}
そして、これは60分ごとに呼び出されたスレッドです:
@Override
public void run() {
try {
// do some HTTP request here
// if an error occurs, catch it and log the error message
} catch (Exception e) {
LOGGER.error(e.getMessage());
}
}
(HTTP要求を行い)スレッドがchrashed場合は、全体ExecutorServiceのもはや働いていません。すべての例外を捕まえると、どうすればそれが可能になりますか?タスクのいずれかの実行が例外に遭遇した場合
コードスニペットは参考になります。 –