ScheduledExecutorService<wbr style="line-height:25px"><br style="line-height:25px">
所有超级接口:<br style="line-height:25px">
Executor,ExecutorService<br style="line-height:25px">
所有已知实现类:<br style="line-height:25px">
ScheduledThreadPoolExecutor<br style="line-height:25px">
publicinterfaceScheduledExecutorService<br style="line-height:25px">
extendsExecutorService<br style="line-height:25px"><span style="color:#ff00ff; line-height:25px">ScheduledExecutorService</span><span style="color:#003366; line-height:25px">是一个</span><span style="color:#ff6600; line-height:25px">ExecutorService</span><span style="color:#003366; line-height:25px">,</span><wbr style="line-height:25px"><span style="color:#003366; line-height:25px">但是可安排在给定的延迟后运行或定期执行的命令</span><wbr style="line-height:25px"><span style="color:#003366; line-height:25px">。</span><br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#993300; line-height:25px">schedule</span><span style="color:#003366; line-height:25px">方法使用各种延迟创建任务,并返回一个可用于取消或检查执行的任务的</span><span style="color:#ff9900; line-height:25px">ScheduledFuture</span><span style="color:#003366; line-height:25px">对象<wbr style="line-height:25px">。<br style="line-height:25px"><wbr style="line-height:25px">scheduleAtFixedRate和scheduleWithFixedDelay方法创建并执行某些在取消前一直定期运行的任务<wbr style="line-height:25px">。</wbr></wbr></wbr></span><br style="line-height:25px">
用<span style="color:#0000ff; line-height:25px">Executor.execute(java.lang.Runnable)</span>和<span style="color:#0000ff; line-height:25px">ExecutorService的submit</span>方法所提交的命令,通过所请求的<wbr style="line-height:25px"><span style="color:#0000ff; line-height:25px">0延迟</span><wbr style="line-height:25px">进行安排。<br style="line-height:25px"><wbr style="line-height:25px"><span style="color:#ff6600; line-height:25px">schedule</span><span style="color:#003366; line-height:25px">方法中允许出现</span><span style="color:#ff9900; line-height:25px">0</span><span style="color:#003366; line-height:25px">和</span><span style="color:#ff9900; line-height:25px">负数延迟</span><span style="color:#003366; line-height:25px">(但不是周期),并将这些视为是</span><span style="color:#000080; line-height:25px">立即执行的请求</span><wbr style="line-height:25px"><span style="color:#003366; line-height:25px">。</span><br style="line-height:25px">
所有的schedule方法都接受<wbr style="line-height:25px"><span style="color:#000080; line-height:25px">相对延迟和周期作为参数</span><wbr style="line-height:25px">,而不是绝对的时间或日期。<br style="line-height:25px">
将以Date所表示的绝对时间转换成要求的形式很容易。例如,要安排在某个以后的Date运行,<br style="line-height:25px">
可以使用:<span style="color:#0000ff; line-height:25px">schedule(task,</span><wbr style="line-height:25px"><span style="color:#ff9900; line-height:25px">date.getTime()-System.currentTimeMillis()</span><strong>,</strong><wbr style="line-height:25px"><span style="color:#0000ff; line-height:25px">TimeUnit.MILLISECONDS)</span>。<br style="line-height:25px">
但是要注意,由于网络时间同步协议、时钟漂移或其他因素的存在,因此相对延迟的期满日期不必与启用任务的当前Date相符。<br style="line-height:25px">
Executors类为此包中所提供的ScheduledExecutorService实现提供了便捷的工厂方法。<br style="line-height:25px">
注意1:它只有一个实现类<wbr style="line-height:25px"><span style="color:#99cc00; line-height:25px">ScheduledThreadPoolExecutor</span><wbr style="line-height:25px">。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
关于
ScheduledThreadPoolExecutor的更多内容请参考《
ScheduledThreadPoolExecutor》
用法示例
以下是一个带方法的类,它设置了ScheduledExecutorService,在1小时内每10秒钟蜂鸣一次:
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep");
};
final ScheduledFuture beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
}}
主要方法:
ScheduledFuture<?><wbr style="line-height:25px"><span style="color:#ff6600; line-height:25px">schedule</span><wbr style="line-height:25px">(Runnablecommand,<br style="line-height:25px">
longdelay,<br style="line-height:25px">
TimeUnitunit)<br style="line-height:25px">
创建并执行在给定延迟后启用的一次性操作。<br style="line-height:25px">
参数:<br style="line-height:25px">
command-要执行的任务<br style="line-height:25px">
delay-从现在开始延迟执行的时间<br style="line-height:25px">
unit-延迟参数的时间单位<br style="line-height:25px">
返回:<br style="line-height:25px">
表示挂起任务完成的ScheduledFuture,并且其get()方法在完成后将返回null<br style="line-height:25px">
抛出:<br style="line-height:25px">
RejectedExecutionException-如果无法安排执行该任务<br style="line-height:25px">
NullPointerException-如果command为null<br style="line-height:25px">
<V>ScheduledFuture<V><wbr style="line-height:25px"><span style="color:#ff6600; line-height:25px">schedule</span><wbr style="line-height:25px">(Callable<V>callable,<br style="line-height:25px">
longdelay,<br style="line-height:25px">
TimeUnitunit)<br style="line-height:25px">
创建并执行在给定延迟后启用的ScheduledFuture。<br style="line-height:25px">
参数:<br style="line-height:25px">
callable-要执行的功能<br style="line-height:25px">
delay-从现在开始延迟执行的时间<br style="line-height:25px">
unit-延迟参数的时间单位<br style="line-height:25px">
返回:<br style="line-height:25px">
可用于提取结果或取消的ScheduledFuture<br style="line-height:25px">
抛出:<br style="line-height:25px">
RejectedExecutionException-如果无法安排执行该任务<br style="line-height:25px">
NullPointerException-如果callable为null<br style="line-height:25px">
ScheduledFuture<?><wbr style="line-height:25px"><span style="color:#ff6600; line-height:25px">scheduleAtFixedRate</span><wbr style="line-height:25px">(Runnablecommand,<br style="line-height:25px">
longinitialDelay,<br style="line-height:25px">
longperiod,<br style="line-height:25px">
TimeUnitunit)<br style="line-height:25px">
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在initialDelay后开始执行,然后在initialDelay+period后执行,接着在initialDelay+2*period后执行,依此类推。如果任务的任何一个执行遇到异常,则后续执行都会被取消。否则,只能通过执行程序的取消或终止方法来终止该任务。如果此任务的任何一个执行要花费比其周期更长的时间,则将推迟后续执行,但不会同时执行。<br style="line-height:25px">
参数:<br style="line-height:25px">
command-要执行的任务<br style="line-height:25px">
initialDelay-首次执行的延迟时间<br style="line-height:25px">
period-连续执行之间的周期<br style="line-height:25px">
unit-initialDelay和period参数的时间单位<br style="line-height:25px">
返回:<br style="line-height:25px">
表示挂起任务完成的ScheduledFuture,并且其get()方法在取消后将抛出异常<br style="line-height:25px">
抛出:<br style="line-height:25px">
RejectedExecutionException-如果无法安排执行该任务<br style="line-height:25px">
NullPointerException-如果command为null<br style="line-height:25px">
IllegalArgumentException-如果period小于等于0<br style="line-height:25px">
ScheduledFuture<?><wbr style="line-height:25px"><span style="color:#ff6600; line-height:25px">scheduleWithFixedDelay</span><wbr style="line-height:25px">(Runnablecommand,<br style="line-height:25px">
longinitialDelay,<br style="line-height:25px">
longdelay,<br style="line-height:25px">
TimeUnitunit)<br style="line-height:25px">
创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在<span style="color:#000080; line-height:25px">给定的延迟</span>。<br style="line-height:25px">
如果任务的任一执行遇到异常,就会取消后续执行。否则,只能通过执行程序的取消或终止方法来终止该任务。<br style="line-height:25px">
参数:<br style="line-height:25px">
command-要执行的任务<br style="line-height:25px">
initialDelay-首次执行的延迟时间<br style="line-height:25px">
delay-一次执行终止和下一次执行开始之间的延迟<br style="line-height:25px">
unit-initialDelay和delay参数的时间单位<br style="line-height:25px">
返回:<br style="line-height:25px">
表示挂起任务完成的ScheduledFuture,并且其get()方法在取消后将抛出异常<br style="line-height:25px">
抛出:<br style="line-height:25px">
RejectedExecutionException-如果无法安排执行该任务<br style="line-height:25px">
NullPointerException-如果command为null。<br style="line-height:25px">
IllegalArgumentException-如果delay小于等于0</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
相关推荐
ScheduledExecutorService是Java并发编程中一个非常重要的工具类,它属于ExecutorService接口的一个实现,主要用于执行定时或周期性的任务。这个服务提供了强大的定时任务管理能力,可以用来安排在未来某一时刻或者...
这是一个jar,很秀。自定义的一个Java定时器工具类。主要是结合Spring Boot一起使用,并在Spring Boot启动的时候一起启动运行。
ScheduledExecutorService 任务定时代码示例 ScheduledExecutorService 是 Java 中的并发编程 API,用于执行延迟或周期性的任务。下面是对 ScheduledExecutorService 的任务定时代码示例的详细解释。 ...
基于ScheduledExecutorService的两种方法详解 基于ScheduledExecutorService的两种方法是Java并发编程中的一种常见方法,用于实现定时任务的执行。ScheduledExecutorService是Java并发编程中的一种高级API,提供了...
首先,Java提供了多种方式来实现延迟执行,例如使用`java.util.Timer`类、`java.util.concurrent.DelayQueue`或者`java.util.concurrent.ScheduledExecutorService`。这里我们将重点讨论`ScheduledExecutorService`...
您可以在工作线程上运行任务(Runnable或Callable),以指定执行计划(如ScheduledExecutorService),并指定执行时间。 介面 ScheduledFuture<?> schedule( Runnable command, int executeTime, long delay,...
本实例将深入探讨如何使用`ScheduledExecutorService`接口来实现这一功能。`ScheduledExecutorService`是Java并发包`java.util.concurrent`中的一个接口,它提供了延迟执行和周期性执行任务的能力。 首先,我们需要...
Java通用任务执行程序,基于java.util.concurrent.ScheduledExecutorService。 Java通用的任务执行器,基于java.util.concurrent.ScheduledExecutorService工具类实现。 Maven: <groupId>...
而 `ScheduledExecutorService` 是 `ExecutorService` 的子接口,增加了定时及周期性任务的执行能力。 在提供的代码示例中,`BeeperControl` 类展示了如何使用 `ScheduledExecutorService` 来实现定时任务调度。...
ScheduledExecutorService 的测试实用程序实现 允许测试如下代码: class Foo { private int count = 0; public Foo(ScheduledExecutorService service, Bar bar) { service.scheduleAtFixedRate(new Runnable...
在Java中,有两种主要的定时器类:`java.util.Timer` 和 `java.util.concurrent.ScheduledExecutorService`。本文将详细讲解这两种定时器的用法、优缺点以及如何在实际项目中应用它们。 ### 1. `java.util.Timer` ...
Java提供了多种实现定时任务的机制,这里主要介绍两种:Java.util.Timer类和java.util.concurrent.ScheduledExecutorService接口。 1. Java.util.Timer类: Timer类是Java早期提供的定时任务工具,它可以安排在...
这通常是通过Java中的`java.util.Timer`类或者`java.util.concurrent.ScheduledExecutorService`来实现的。这两个工具提供了不同的功能和使用场景,让我们一一进行深入探讨。 首先,我们来看`java.util.Timer`类。...
在Java中,我们可以使用多种库和工具来创建和管理定时任务,如Java的内置API `java.util.Timer` 和 `java.util.concurrent.ScheduledExecutorService`。这两个类提供了丰富的功能,帮助开发者在特定时间或周期性地...
在Java中,我们可以使用多种库来实现这个功能,其中最常用的两个是`java.util.Timer`和`java.util.concurrent.ScheduledExecutorService`。 ## 1. `java.util.Timer` `Timer`类是Java标准库中的一个基础定时器,...
在Java中,有多种方式可以实现任务调度,包括基础的`Timer`类、`ScheduledExecutorService`接口以及第三方库如Quartz和JCronTab。 首先,我们来看`Timer`类。`Timer`是最简单的任务调度实现,它基于单线程模型,...
我们可以使用`Executors`类的静态方法创建一个ScheduledExecutorService实例,然后通过`schedule()`, `scheduleAtFixedRate()` 或 `scheduleWithFixedDelay()` 方法来安排任务。ScheduledExecutorService相比Timer有...
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3); ``` 然后,我们可以通过ScheduledExecutorService的scheduleWithFixedDelay()或scheduleAtFixedRate()方法来安排任务...
本示例将详细介绍如何在Android中使用两种主要的线程池:ThreadPoolExecutor和ScheduledExecutorService。 ThreadPoolExecutor是Java并发库中提供的一个基础线程池实现,它允许开发者自定义核心线程数、最大线程数...