`
Donald_Draper
  • 浏览: 979783 次
社区版块
存档分类
最新评论

ScheduledExecutorService接口定义

    博客分类:
  • JUC
阅读更多
Executor接口的定义:http://donald-draper.iteye.com/blog/2365625
ExecutorService接口定义:http://donald-draper.iteye.com/blog/2365738
Future接口定义:http://donald-draper.iteye.com/blog/2365798
FutureTask解析:http://donald-draper.iteye.com/blog/2365980
CompletionService接口定义:http://donald-draper.iteye.com/blog/2366239
ExecutorCompletionService解析:http://donald-draper.iteye.com/blog/2366254
AbstractExecutorService解析:http://donald-draper.iteye.com/blog/2366348
package java.util.concurrent;
import java.util.concurrent.atomic.*;
import java.util.*;

/**
 * An {@link ExecutorService} that can schedule commands to run after a given
 * delay, or to execute periodically.
 *
 ScheduledExecutorService可以在给定的时延后执行任务,或周期性、间隔性
 执行任务。
 * <p> The <tt>schedule</tt> methods create tasks with various delays
 * and return a task object that can be used to cancel or check
 * execution. The <tt>scheduleAtFixedRate</tt> and
 * <tt>scheduleWithFixedDelay</tt> methods create and execute tasks
 * that run periodically until cancelled.
 *
schedule可以执行指定时延的任务,返回一个ScheduledFuture,我们可以通过
ScheduledFuture取消或检查任务的执行。scheduleAtFixedRate和scheduleWithFixedDelay
方法可以创建和执行周期性的任务,直到任务取消
 * <p> Commands submitted using the {@link Executor#execute} and
 * {@link ExecutorService} <tt>submit</tt> methods are scheduled with
 * a requested delay of zero. Zero and negative delays (but not
 * periods) are also allowed in <tt>schedule</tt> methods, and are
 * treated as requests for immediate execution.
 *
 如果提交的任务延时为0,则提交的任务用Executor#execute方法,或ExecutorService的
 submit方法执行任务。在schedule方法中,允许延时为0或负数,对于这种情况,
 我们当立即执行任务的请求对待。
 * <p>All <tt>schedule</tt> methods accept [i]relative[/i] delays and
 * periods as arguments, not absolute times or dates. It is a simple
 * matter to transform an absolute time represented as a {@link
 * java.util.Date} to the required form. For example, to schedule at
 * a certain future <tt>date</tt>, you can use: <tt>schedule(task,
 * date.getTime() - System.currentTimeMillis(),
 * TimeUnit.MILLISECONDS)</tt>. Beware however that expiration of a
 * relative delay need not coincide with the current <tt>Date</tt> at
 * which the task is enabled due to network time synchronization
 * protocols, clock drift, or other factors.
 *
schedule接受一个相对的延时时间和时间单元做为参数,非绝对的时间或日期。
我们可以将一个java.util.Date表示的绝对时间转化为需要的格式。比如想在一个
确定的时间执行,可以用schedule(task,date.getTime() - System.currentTimeMillis(),TimeUnit.MILLISECONDS)。
使用绝对时间的转换的时候,要注意相对的过期时间,由于服务器网络时间同步协议导致的时间偏移,不能在
准确的时间调度延时任务。

 * The {@link Executors} class provides convenient factory methods for
 * the ScheduledExecutorService implementations provided in this package.
 *
 在执行器Executors提供了便利的工厂方法,用于创建ScheduledExecutorService。
 * <h3>Usage Example</h3>
 *
 * Here is a class with a method that sets up a ScheduledExecutorService
 * to beep every ten seconds for an hour:
 *
 下面是一个在一小时内,每10调度一次周期任务的示例:
 *  <pre> {@code
 * 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 =
         //每10秒执行一次,周期任务
 *       scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
       //一个小时后,取消周期任务
 *     scheduler.schedule(new Runnable() {
 *       public void run() { beeperHandle.cancel(true); }
 *     }, 60 * 60, SECONDS);
 *   }
 * }}</pre>
 *
 * @since 1.5
 * @author Doug Lea
 */
public interface ScheduledExecutorService extends ExecutorService {

    /**
     * Creates and executes a one-shot action that becomes enabled
     * after the given delay.
     根据Runnable,delay创建一个只执行一次的延时无结果任务ScheduledFuture<?>,延时时间过后,执行无结果任务
     *
     * @param command the task to execute
     * @param delay the time from now to delay execution
     * @param unit the time unit of the delay parameter
     * @return a ScheduledFuture representing pending completion of
     *         the task and whose <tt>get()</tt> method will return
     *         <tt>null</tt> upon completion
     * @throws RejectedExecutionException if the task cannot be
     *         scheduled for execution
     * @throws NullPointerException if command is null
     */
    public ScheduledFuture<?> schedule(Runnable command,
                                       long delay, TimeUnit unit);

    /**
     * Creates and executes a ScheduledFuture that becomes enabled after the
     * given delay.
     *
      根据Callable,delay创建一个只执行一次的延时有结果任务ScheduledFuture<V>,延时时间过后,执行任务
     * @param callable the function to execute
     * @param delay the time from now to delay execution
     * @param unit the time unit of the delay parameter
     * @return a ScheduledFuture that can be used to extract result or cancel
     * @throws RejectedExecutionException if the task cannot be
     *         scheduled for execution
     * @throws NullPointerException if callable is null
     */
    public <V> ScheduledFuture<V> schedule(Callable<V> callable,
                                           long delay, TimeUnit unit);

    /**
     * Creates and executes a periodic action that becomes enabled first
     * after the given initial delay, and subsequently with the given
     * period; that is executions will commence after
     * <tt>initialDelay</tt> then <tt>initialDelay+period</tt>, then
     * <tt>initialDelay + 2 * period</tt>, and so on.
     * If any execution of the task
     * encounters an exception, subsequent executions are suppressed.
     * Otherwise, the task will only terminate via cancellation or
     * termination of the executor.  If any execution of this task
     * takes longer than its period, then subsequent executions
     * may start late, but will not concurrently execute.
     *
     创建执行一个周期性间隔为period的任务,在初始化延时initialDelay后,执行任务,
     然后在initialDelay+period执行任务,接着在initialDelay + 2 * period执行任务,依次类推。
     如果任务一个任务执行异常,则后续的任务将会被取消。另外任务执行被结束通过取消或执行器执行结束。
     如果周期性任务中的一个任务所花时间大于period,后续的任务执行将会延迟,而不是并发执行。
     initialDelay为0,period为2,每个任务执行需要3秒
     0--2--4--6--....
     t0--t1--t2--t3--...
     * @param command the task to execute
     * @param initialDelay the time to delay first execution
     * @param period the period between successive executions
     * @param unit the time unit of the initialDelay and period parameters
     * @return a ScheduledFuture representing pending completion of
     *         the task, and whose <tt>get()</tt> method will throw an
     *         exception upon cancellation
     * @throws RejectedExecutionException if the task cannot be
     *         scheduled for execution
     * @throws NullPointerException if command is null
     * @throws IllegalArgumentException if period less than or equal to zero
     */
    public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
                                                  long initialDelay,
                                                  long period,
                                                  TimeUnit unit);

    /**
     * Creates and executes a periodic action that becomes enabled first
     * after the given initial delay, and subsequently with the
     * given delay between the termination of one execution and the
     * commencement of the next.  If any execution of the task
     * encounters an exception, subsequent executions are suppressed.
     * Otherwise, the task will only terminate via cancellation or
     * termination of the executor.
     创建执行一个周期性间隔为period的任务,在初始化延时initialDelay后,执行第一个周期性任务,
     后续任务执行的延迟时间为前一个任务执行结束和下一个任务开始的时间间隔。我们假设initialDelay为0,delay为2,
     每个任务执行需要3秒,第一个任务执行后为3秒,下一个任务执行的时间为5秒(3+2)。有时候
     0---3--5---8--10----14--16-----...
     t0-----t1(5)-----t2(10)------t3(16)-----...
    我们假设t2执行的时间为4秒,那t3执行的时间点为16。
     如果任务有一个任务执行异常,则后续的任务将会被取消。另外任务执行被结束通过取消或执行器执行结束。
     *
     * @param command the task to execute
     * @param initialDelay the time to delay first execution
     * @param delay the delay between the termination of one
     * execution and the commencement of the next
     * @param unit the time unit of the initialDelay and delay parameters
     * @return a ScheduledFuture representing pending completion of
     *         the task, and whose <tt>get()</tt> method will throw an
     *         exception upon cancellation
     * @throws RejectedExecutionException if the task cannot be
     *         scheduled for execution
     * @throws NullPointerException if command is null
     * @throws IllegalArgumentException if delay less than or equal to zero
     */
    public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                     long initialDelay,
                                                     long delay,
                                                     TimeUnit unit);

}



//ScheduledFuture,继承了Delayed和Future接口
/**
 * A delayed result-bearing action that can be cancelled.
 * Usually a scheduled future is the result of scheduling
 * a task with a {@link ScheduledExecutorService}.
 *
 * @since 1.5
 * @author Doug Lea
 * @param <V> The result type returned by this Future
 */
public interface ScheduledFuture<V> extends Delayed, Future<V> {
}
0
1
分享到:
评论

相关推荐

    Java并发之线程池Executor框架的深入理解

    ExecutorService接口定义了对Executor的服务, ScheduledExecutorService接口定义了定时调度接口,而AbstractExecutorService抽象类则是执行框架的抽象实现。 ThreadPoolExecutor是JDK中线程池的具体实现,提供了一...

    接口课程设计(计时时钟)的设计与实现

    接口定义了一组方法签名,但不包含实现,这使得实现这些接口的类可以自由地提供自己的实现逻辑。 计时时钟的设计通常包括以下几个关键部分: 1. **时间管理**:计时器的核心在于准确地跟踪和表示时间。这需要对...

    spring定时器相关资料

    3. **ScheduledExecutorService接口**:除了异步执行外,Spring还提供了定时执行任务的能力。ScheduledExecutorService接口提供了延迟执行和周期性执行任务的方法。 二、Spring定时器(TaskScheduler) 1. **Task...

    java.util.concurrent.uml.pdf

    ScheduledExecutorService接口扩展了ExecutorService接口,并增加了定时和周期性执行任务的能力。这表示该接口可以安排在未来某一时刻执行任务,或周期性重复执行。 ExecutorService是Executor的一个子接口,增加了...

    Springmvc java注解设置定时任务实例

    本实例将深入探讨如何使用`ScheduledExecutorService`接口来实现这一功能。`ScheduledExecutorService`是Java并发包`java.util.concurrent`中的一个接口,它提供了延迟执行和周期性执行任务的能力。 首先,我们需要...

    Java线程池.docx

    该接口定义了三类定时方法: 1. schedule方法 schedule方法用于在给定的时间对任务进行一次性调度。该方法有两个重载版本: ```java public ScheduledFuture&lt;?&gt; schedule(Runnable command, long delay, TimeUnit...

    JAVA多线程框架[定义].pdf

    对于需要定时执行的任务,Java并发库提供了`ScheduledExecutorService`接口。这个接口允许你安排任务在未来某个时间点或周期性地执行。例如,`ScheduledExecutorService`可以用于实现定时任务,如统计、优化、数据...

    java监视服务看门狗

    2. 服务接口定义:定义了服务启动、停止等操作的接口,供看门狗和服务实现类交互。 3. 服务实现类:实现了服务接口,包含了服务的实际启动和停止逻辑。 4. 配置文件:可能包含了看门狗的配置信息,如检查间隔、日志...

    java定时器定时调用任务

    而`java.util.TimerTask`是实现了Runnable接口的抽象类,它是所有定时任务的基础,你需要继承它并重写`run()`方法来定义自己的任务逻辑。 创建一个定时任务的基本步骤如下: 1. 创建`TimerTask`子类:首先,你需要...

    3类java定时任务代码

    Java提供了多种实现定时任务的方法,包括`java.util.Timer`类和`java.util.concurrent.ScheduledExecutorService`接口。下面将详细讨论这些知识点。 1. **java.util.Timer**: `Timer`类是Java标准库中的一个基础...

    java 写的定时器

    `java.util.concurrent.ScheduledExecutorService` 接口 `ScheduledExecutorService` 是Java并发包(`java.util.concurrent`)的一部分,提供更强大、灵活的定时任务调度功能。它支持多线程任务执行,并且可以取消...

    Java定时执行某个任务

    在这个例子中,`TimerTask`是一个实现了Runnable接口的匿名内部类,它的`run()`方法定义了要定时执行的任务。`Timer`的`schedule()`方法用于设置任务的初始延迟和周期性执行的时间间隔。 然而,`Timer`类有一些局限...

    java 实现调度器

    `ScheduledExecutorService`是`ExecutorService`接口的一个子接口,提供了更高级的定时和延迟执行任务的能力。与`Timer`相比,`ScheduledExecutorService`是线程安全的,更适合多线程环境。它可以处理多个并发任务,...

    JAVA定时任务

    通过实现`Runnable`或`Callable`接口并使用`ScheduledExecutorService`的`schedule`、`scheduleAtFixedRate`和`scheduleWithFixedDelay`方法来安排任务。 2. **Timer和TimerTask** 在较早的Java版本中,`java.util...

    java做的一个定时提醒软件

    使用`Runnable`或`Callable`接口定义任务,并通过`submit()`或`execute()`方法提交到`ScheduledExecutorService`进行执行。在设计定时提醒时,需要考虑任务的触发时机、重复频率、取消和暂停机制等要素。 为了提供...

    Spring基于线程池的定时任务线挰异常实践

    Spring通过实现ScheduledExecutorService接口的ScheduledExecutorBean,提供了ScheduledTasks的支持。我们可以通过@Scheduled注解来定义一个方法为定时任务,例如每5秒执行一次,或者在特定时间点执行。 当涉及...

    Java调度原理及使用.docx

    在Java中,有多种方式可以实现任务调度,包括基础的`Timer`类、`ScheduledExecutorService`接口以及第三方库如Quartz和JCronTab。 首先,我们来看`Timer`类。`Timer`是最简单的任务调度实现,它基于单线程模型,...

    java多线程并发executorservice(任务调度)类

    而 `ScheduledExecutorService` 是 `ExecutorService` 的子接口,增加了定时及周期性任务的执行能力。 在提供的代码示例中,`BeeperControl` 类展示了如何使用 `ScheduledExecutorService` 来实现定时任务调度。...

    深入理解高并发编程-Java线程池核心技术

    线程池中的重要顶层接口和抽象类,如ExecutorService、AbstractExecutorService和ScheduledExecutorService,提供了基础的线程池服务和调度功能。这些接口和抽象类为开发者构建和定制线程池提供了灵活性,可以根据...

Global site tag (gtag.js) - Google Analytics