スケジュールされたタスクのスレッドプールを作成します。
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