スレッドプールS h e d u l edExecutorService(2)s c h e d u l eAtFixedRateタスクは中止されましたがログ情報はありません

7388 ワード

プロジェクトで問題が発生し、ScheduledExecutorService例はscheduleAtFixedRateによってタイミングサイクルのタスクを開始し、このタスクが終了したことを発見したが、関連ログのヒントはなかった.
この論文では、タスクが実行されると、try catchがなく、例外ログが印刷されず、後続のタスクが終了すると結論しました.
検証プロセスを見てみましょう.Runnableのrunメソッドから例外が投げ出され、ログの印刷を続行するかどうかを確認します.ログが印刷を続行しない場合は、例外によって計画タスク全体が終了したことを示します.
例外のキャプチャと処理
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduleExecutorServiceTest {
    public static void main(String[] args) {
        ScheduleExecutorServiceTest test = new ScheduleExecutorServiceTest();
        test.testAtFixedRate();
    }
    
    private ScheduledExecutorService executor;
    
    public ScheduleExecutorServiceTest() {
        executor = Executors.newScheduledThreadPool(4);
    }
    
    
    public void testAtFixedRate() {
        executor.scheduleAtFixedRate(new Runnable() {
            
            public void run() {
                System.out.println("     ");
                try{
                    //        
                    long result = 2/0;
                }catch (Exception e){
                    System.out.println(e);
                }
             
            }
        }, 1000, 3000, TimeUnit.MILLISECONDS);

    }}
    


上記の異常は処理されています.結果を見てみましょう.
     
java.lang.ArithmeticException: / by zero
     
java.lang.ArithmeticException: / by zero

以上の結果は、実行情報が所定間隔3 sで印刷されていることを示しており、説明.
例外は取得されませんでした
次に、try catchが異常でない場合のシーンをシミュレートし、上記のtry catch文を注記します.
 public void run() {
                System.out.println("     ");
             //   try{
                    long result = 2/0;
//                }catch (Exception e){
//                    System.out.println(e);
//                }
             
            }
        }, 1000, 3000, TimeUnit.MILLISECONDS);

結果を見てみましょう
     

ログは印刷の内容が1回しか印刷されていないことを発見して、説明は1回だけ実行して掛けて、後続の任務はもうトリガーしません;異常ログ出力はありません.そのため、エラー・ログがなく、問題が特定できないことを避けるために、例外をできるだけキャプチャすることに特に注意する必要があります.