定期的なタスク-ScheduledExecutorService

スケジュールされたタスクのスレッドプールを作成します。

ScheduledExecutorService ExecutorServiceの= Executors.newScheduledThreadPool(4); // 推奨しない

//または
ScheduledExecutorService ExecutorServiceの=新しいScheduledThreadPoolExecutorの(4); //推荐

 

スケジュールされたタスクを作成します。

パブリック インターフェース ScheduledExecutorServiceは延びExecutorServiceの{ 

  公共 <?> ScheduledFutureスケジュール(Runnableをコマンド、長い遅延、TimeUnitで単位)。

  パブリック <V> ScheduledFuture <V>スケジュール(呼び出し可能<V>呼び出し可能な、長い遅延、TimeUnitで単位)。

  公共 <?> ScheduledFuture scheduleAtFixedRate(Runnableをコマンド、長い initialDelayの、長い期間、TimeUnitで単位)。
  公共 ScheduledFuture scheduleWithFixedDelay(Runnableをコマンド、<?> 長い initialDelayの、長い遅延、TimeUnitで単位)。 }

 

この例では、スケジュールされたタスクを作成します

例1:遅延実行

パッケージcom.java.scheduled.task.pool。

輸入java.text.SimpleDateFormatの。
輸入java.util.Date;
輸入java.util.concurrent.ScheduledExecutorService。
輸入java.util.concurrent.ScheduledThreadPoolExecutor。
輸入java.util.concurrent.TimeUnit。

パブリック クラスScheduledTaskDemo01 { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        ScheduledExecutorService ExecutorServiceの = 新規のScheduledThreadPoolExecutor(4 )。
        SimpleDateFormat SDF = 新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS" )。
        日付 = 新しい新しい日付(); 
        のSystem.out.println( "タスクのスケジューリング:" + sdf.format(DATE));
         ロング C1 = date.getTime(); 
        RunnableをRunnableを =() - > { 
            DATEのnowDate = 新しい新しい日付(); 
            のSystem.out.println( "****スケジュールされたタスク(1):2秒の遅延実行]" ); 
            のSystem.out.println( "リアルタイムミッション:" + sdf.format (nowDate)); 
            のSystem.out.println( "遅延時間:" +(nowDate.getTime() - C1)+ "MS" ); 
        }; 
        executorService.schedule、(Runnableを 2 TimeUnitで、。SECONDS);
    } 
    
}

次のように実行結果は以下のとおりです。

タスクの実施時期:2019年5月28日12時10分46秒
****スケジュールされたタスク(1 ):[の2秒の遅延執行
リアルミッション時間: 2019年5月28日12時10分48秒
の遅延時間:2087ms

 

例2:遅延実行、結果を返します

パッケージcom.java.scheduled.task.pool。

輸入java.text.SimpleDateFormatの。
輸入java.util.Date;
輸入 java.util.concurrentの*。; 

パブリック クラスScheduledTaskDemo02 { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        ScheduledExecutorService ExecutorServiceの = Executors.newScheduledThreadPool(4 )。
        SimpleDateFormat SDF = 新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS" )。
        日付日付 = 新しい日付(); 
        System.out.println( "安排执行任务的时间:" +sdf.format(DATE));
         ロング C2 = date.getTime(); 
        呼び出し可能 <文字列>コーラブル=() - > { 
            日付nowDate = 新しい新しい日付(); 
            System.out.printlnは(「****プログラムタスク( 2):2秒の遅延は、最終的な結果を返すために実行される] " ); 
            のSystem.out.printlnは( "時間は、実際に作業を行い、 "+ sdf.format(nowDate)); 
            のSystem.out.println( "遅延時間: "+(nowDate.getTime() - C2)+" MS " ); 
            のThread.sleep( 1000 ); 
            System.out.printlnは( "タスクが終了し、現在の時刻:「+ sdf.format(新しい新しい日付())) ;
             リターン "成功」 ;
        }。
        ScheduledFuture <ストリング> scheduledFuture = executorService.schedule(呼び出し可能な、2 、TimeUnit.SECONDS)。
        試す{ 
            のSystem.out.println( "任务的执行结果:" + scheduledFuture.get())。
        } キャッチ(ExecutionExceptionのE1){ 
            e1.printStackTrace()。
        } キャッチ(InterruptedExceptionあるのE2){ 
            e2.printStackTrace()。
        } 
    } 

}

次のように実行結果は以下のとおりです。

タスクの実行時期:2019年5月28日午前12時14分05秒は
****スケジュールされたタスク(2 ):2秒の遅延実行、実行は、最終結果に戻る] 
タスクを実行するための実際の時間: 2019-05-2812:午前14時07分
の遅延時間:2072ms 
タスクが終了し、現在の時刻: 2019年5月28日12時14分08秒
タスクの実行結果:成功

 

例3:遅延タスクは+定期的に実施

パッケージcom.java.scheduled.task.pool。

輸入java.text.SimpleDateFormatの。
輸入java.util.Date;
輸入java.util.concurrent.Executors。
輸入java.util.concurrent.ScheduledExecutorService。
輸入java.util.concurrent.TimeUnit。

パブリック クラスScheduledTaskDemo03 { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        ScheduledExecutorService ExecutorServiceの = Executors.newScheduledThreadPool(4 )。
        SimpleDateFormat SDF = 新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS" )。
        日付日付 =新しい新しい日付(); 
        System.out.printlnは( "タスクのスケジューリング:" + sdf.format(DATE));
         ロング C3 = date.getTime(); 
        RunnableをRunnableを = 新しい新しいRunnableを(){
             ロング exeTime = C3; 
            @Override 
            公共 ボイドRUN(){ 
                日付nowDate = 新しい新しい日付(); 
                System.out.printlnは(「--------------------------- -------------------------------------------------- ---「); 
                のSystem.out.println(」スケジュールされたタスク(3): "[2秒ごとにタスクを実行した後1秒の遅延最初のタスクの実装、] );
                System.out.println( "****実際のミッション時間:" + sdf.format(nowDate)); 
                System.out.printlnは( "最後の時間間隔以降****ミッション:" +( nowDate.getTime() - exeTime)+ "MS" );
                 試み{ 
                    のThread.sleep( 4000 ); 
                } キャッチ(InterruptedExceptionあるE){} 
                exeTime = nowDate.getTime(); 
            } 
        }; 
        executorService.scheduleAtFixedRate(Runnableを、 1、。 2 、TimeUnit.SECONDS); 
    } 

}

次のように実行結果は以下のとおりです。

タスクの実施時期:2019年5月28日12時15分12秒
---------------------------------- ---------------------------------------------- 
スケジュールされたタスク( 3 ):[タスクを実行する毎に2秒後に1秒の遅延最初のタスクの実装では、]
 2019年5月28日12時15分13秒:実際タスク****時間を実行
**** 最後の任務から間隔:1003ms
 --------------------------------------------- ----------------------------------- 
スケジュールされたタスク( 3 ):[1秒の遅延最初のミッションの実装、その後タスクごとに2秒]
 2019年5月28日12時15分17秒:****は、実際の作業時間実行
**** タスクを実行するために最後の時間間隔から:4002msを
 ------ -------------------------------------------------- ------------------------ 
スケジュールされたタスク( 3 ):[1 2番目のタスクを実行する毎に2秒後、最初のタスクの実行を遅らせます]
 * ***タスクを実行するための実際の時間を:2019年5月28日午前12時15分21秒
**** タスクを実行するための最後の時間間隔から:4001ms
-------------------------------------------------- ------------------------------ 
スケジュールされたタスク( 3 ):[1秒毎に2の後に、最初のタスクの実行を遅延]タスクを実行する秒
実際にタスクを実行するには、****時間:2019年5月28日午前12時15分25秒
、最後のミッションから****時間間隔:4002ms

 

例4:初期遅延+遅延定期的なタスク

パッケージcom.java.scheduled.task.pool。

輸入java.text.SimpleDateFormatの。
輸入java.util.Date;
輸入java.util.concurrent.Executors。
輸入java.util.concurrent.ScheduledExecutorService。
輸入java.util.concurrent.TimeUnit。

パブリック クラスScheduledTaskDemo04 { 

    公共 静的 ボイドメイン(文字列[]引数){ 
        ScheduledExecutorService ExecutorServiceの = Executors.newScheduledThreadPool(4 )。
        SimpleDateFormat SDF = 新しいてSimpleDateFormat( "YYYY-MM-DD HH:MM:SS" )。
        日付日付 =新しい新しい日付(); 
        System.out.printlnは( "タスクのスケジューリング:" + sdf.format(DATE));
         ロング C3 = date.getTime(); 
        RunnableをRunnableを = 新しい新しいRunnableを(){
             ロング exeTime = C3; 
            @Override 
            公共 ボイドRUN(){ 
                日付nowDate = 新しい新しい日付(); 
                System.out.printlnは(「--------------------------- -------------------------------------------------- ---「); 
                のSystem.out.println(」スケジュールされたタスク(4): "[2秒ごとにタスクを実行した後1秒の遅延最初のタスクの実装、] );
                System.out.println( "****実際のミッション時間:" + sdf.format(nowDate)); 
                System.out.printlnは( "最後の時間間隔以降****ミッション:" +( nowDate.getTime() - exeTime)+ "MS" );
                 試み{ 
                    のThread.sleep( 2500 ); 
                } キャッチ(InterruptedExceptionあるE){} 
                exeTime = nowDate.getTime(); 
            } 
        }; 
        executorService.scheduleWithFixedDelay(Runnableを、 1、。 2 、TimeUnit.SECONDS); 
    } 

}

次のように実行結果は以下のとおりです。

タスクの実施時期:2019年5月28日12時16分56秒
---------------------------------- ---------------------------------------------- 
スケジュールされたタスク( 4 ):[タスクを実行する毎に2秒後に最初のタスクの実現1秒の遅延は、】
実際の作業を行い****時間:2019年5月28日12時16分57秒
**** 最後のミッションから間隔:1018ms
 --------------------------------------------- ----------------------------------- 
スケジュールされたタスク( 4 ):[1秒の遅延最初のミッションの実装、その後タスクごとに2秒]
 2019年5月28日12時17分01秒:****は、実際の作業時間実行
**** タスクを実行するために最後の時間間隔から:4504msを
 ------ -------------------------------------------------- ------------------------ 
スケジュールされたタスク( 4 ):[1 2番目のタスクを実行する毎に2秒後、最初のタスクの実行を遅らせます]
 * ***タスクを実行するための実際の時間を:2019年5月28日12時17分06秒
**** タスクを実行するための最後の時間間隔から:4502ms
-------------------------------------------------- ------------------------------ 
スケジュールされたタスク( 4 ):1秒毎に2の後に、最初のタスクの実行を遅延]タスクを実行する秒
実際にタスクを実行するには、****時間:2019年5月28日12時17分十秒
最後のミッションから****時間間隔:4502ms

 

おすすめ

転載: www.cnblogs.com/517cn/p/10936460.html