Beispiele für Java ScheduledExecutorService
In Java können wirScheduledExecutorService
verwenden, um eine Aufgabe regelmäßig oder einmal nach einer vordefinierten Verzögerung vonTimeUnit
auszuführen.
1. Führen Sie eine Aufgabe einmal aus
DieScheduledExecutorService
akzeptieren sowohlRunnable
als auchCallable
Aufgaben.
1.1 Run a Runnable
task after 5 seconds initial delay.
ScheduledExecutorExample.java
package com.example.concurrency.executor.scheduler; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ScheduledExecutorRunnable { public static void main(String[] args) { ScheduledExecutorService ses = Executors.newScheduledThreadPool(1); Runnable task2 = () -> System.out.println("Running task2..."); task1(); //run this task after 5 seconds, nonblock for task3 ses.schedule(task2, 5, TimeUnit.SECONDS); task3(); ses.shutdown(); } public static void task1() { System.out.println("Running task1..."); } public static void task3() { System.out.println("Running task3..."); } }
Ausgabe
Running task1... Running task3... Running task2... //display after 5 seconds
1.2 Run a Callable
task after 5 seconds initial delay.
ScheduledExecutorExample.java
package com.example.concurrency.executor.scheduler; import java.util.concurrent.*; public class ScheduledExecutorCallable { public static void main(String[] args) throws InterruptedException, ExecutionException { ScheduledExecutorService ses = Executors.newScheduledThreadPool(1); Callabletask2 = () -> 10; task1(); //run this task after 5 seconds, nonblock for task3, returns a future ScheduledFuture schedule = ses.schedule(task2, 5, TimeUnit.SECONDS); task3(); // block and get the result System.out.println(schedule.get()); System.out.println("shutdown!"); ses.shutdown(); } public static void task1() { System.out.println("Running task1..."); } public static void task3() { System.out.println("Running task3..."); } }
Ausgabe
Running task1... Running task3... 10 //display after 5 seconds shutdown!
2. Führen Sie regelmäßig eine Aufgabe aus
Verwenden SiescheduleAtFixedRate
, um eine Aufgabe regelmäßig auszuführen
2.1 Run a Runnable
task every 1 second, after 5 seconds initial delay.
ScheduledExecutorExample.java
package com.example.concurrency.executor.scheduler; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; public class ScheduledExecutorRepeat { private static int count = 0; public static void main(String[] args) throws InterruptedException { ScheduledExecutorService ses = Executors.newScheduledThreadPool(1); Runnable task1 = () -> { count++; System.out.println("Running...task1 - count : " + count); }; // init Delay = 5, repeat the task every 1 second ScheduledFuture> scheduledFuture = ses.scheduleAtFixedRate(task1, 5, 1, TimeUnit.SECONDS); while (true) { System.out.println("count :" + count); Thread.sleep(1000); if (count == 5) { System.out.println("Count is 5, cancel the scheduledFuture!"); scheduledFuture.cancel(true); ses.shutdown(); break; } } } }
Ausgabe
count :0 count :0 count :0 count :0 count :0 Running...task1 - count : 1 count :1 Running...task1 - count : 2 count :2 Running...task1 - count : 3 count :3 Running...task1 - count : 4 count :4 Running...task1 - count : 5 Count is 5, cancel the scheduledFuture!
Quellcode herunterladen
$ git clone https://github.com/example/java-concurrency.git