新しいファイルをアップロードするために 2 分ごとに FTP にアクセスします。java.util.Timer で実装しました。しかし、しばらくすると (数日または 1 週間後)、例外も理由もなく停止します。
スレッドが見つかりました: Java 無制限スレッドはしばらくすると停止します
しかし、それには特別な解決策はありません。ScheduledExecutorService について読みましたが、私が理解している限りでは、Timer と同じです。
アイデアをください!
新しいファイルをアップロードするために 2 分ごとに FTP にアクセスします。java.util.Timer で実装しました。しかし、しばらくすると (数日または 1 週間後)、例外も理由もなく停止します。
スレッドが見つかりました: Java 無制限スレッドはしばらくすると停止します
しかし、それには特別な解決策はありません。ScheduledExecutorService について読みましたが、私が理解している限りでは、Timer と同じです。
アイデアをください!
メイン スレッドで APIを使用してデフォルトの例外ハンドラーを設定し、Thread.setDefaultUncaughtExceptionHandler()
黙って飲み込まれる可能性のあるスロー可能な/例外をログに記録することを試みることができます。
おそらくこれが重複しているため、誰もこの質問に答えていないことがわかりました。
ScheduledExecutorService は を使用しSystem.nanotime()
、Java.util.Timer は を使用しますSystem.currentTimeMillis()
。
System.currentTimeMillis()
システム時間に依存し、System.nanotime()
固定された任意の初期時間からナノ秒を提供し、システム時間とは関係ありません。そのため、システム時刻の変更 (NTP 時刻の修正またはシステム スタンバイによる) は、Timer の実行に影響する場合と影響しない場合があります。これが、タイマーが失敗する理由です。
詳細については、「クロックが変更された場合、Timertask.scheduleAtFixedRate は何をすべきか?」を参照してください。