scheduledexecutorservice 只执行一次_ScheduledExecutorService原理分析
时间: 2023-10-13 09:07:51 浏览: 95
程序只能运行一次,防止程序重复执行。
4星 · 用户满意度95%
`ScheduledExecutorService` 是 Java 中提供的一个用于延迟调度或周期性调度任务的接口。它的实现类 `ScheduledThreadPoolExecutor` 通过使用线程池来执行任务,并且能够对任务进行调度。
如果你只想让 `ScheduledExecutorService` 执行一次,可以使用 `schedule` 方法来实现。例如:
```java
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(() -> {
System.out.println("Hello World!");
}, 10, TimeUnit.SECONDS);
```
上述代码中,`schedule` 方法接受三个参数:要执行的任务,延迟时间,时间单位。在这个例子中,`Hello World!` 会在延迟 10 秒后被打印一次。
`ScheduledExecutorService` 的实现原理是使用一个优先级队列来存储待执行的任务,按照任务的延迟时间排序。每次从队列中取出最先要执行的任务,并将其放入线程池中执行。当任务执行完毕后,如果是周期性任务,会重新放入队列中等待下一次执行。
因此,如果你想让 `ScheduledExecutorService` 只执行一次,可以设置延迟时间为任务执行时间的长度,例如:
```java
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(() -> {
System.out.println("Hello World!");
}, 5, TimeUnit.SECONDS);
```
上述代码中,`Hello World!` 会在延迟 5 秒后被打印一次,并且不会再被执行。
阅读全文