`
windowboy
  • 浏览: 16356 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ScheduledExecutorService

 
阅读更多

 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。

schedule 方法使用各种延迟创建任务,并返回一个可用于取消或检查执行的任务对象。scheduleAtFixedRate  scheduleWithFixedDelay 方法创建并执行某些在取消前一直定期运行的任务。

用 Executor.execute(java.lang.Runnable) 和 ExecutorService 的 submit 方法所提交的命令,通过所请求的 0 延迟进行安排。schedule 方法中允许出现 0 和负数延迟(但不是周期),并将这些视为一种立即执行的请求。

所有的 schedule 方法都接受相对 延迟和周期作为参数,而不是绝对的时间或日期。将以 Date 所表示的绝对时间转换成要求的形式很容易。例如,要安排在某个以后的Date 运行,可以使用:schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)。但是要注意,由于网络时间同步协议、时钟漂移或其他因素的存在,因此相对延迟的期满日期不必与启用任务的当前 Date 相符。 Executors 类为此包中所提供的 ScheduledExecutorService 实现提供了便捷的工厂方法。


1.ScheduledFuture<?> schedule(Runnable command,
                            long delay,
                            TimeUnit unit)
创建并执行在给定延迟后启用的一次性操作。
参数:
command - 要执行的任务
delay - 从现在开始延迟执行的时间
unit - 延迟参数的时间单位
返回:
表示挂起任务完成的 ScheduledFuture,并且其 get() 方法在完成后将返回 null
抛出:
RejectedExecutionException - 如果无法安排执行该任务
NullPointerException - 如果 command 为 null

 

2.<V> ScheduledFuture<V> schedule(Callable<V> callable,
                                long delay,
                                TimeUnit unit)
创建并执行在给定延迟后启用的 ScheduledFuture。
参数:
callable - 要执行的功能
delay - 从现在开始延迟执行的时间
unit - 延迟参数的时间单位
返回:
可用于提取结果或取消的 ScheduledFuture
抛出:
RejectedExecutionException - 如果无法安排执行该任务
NullPointerException - 如果 callable 为 null

3.ScheduledFuture<?> scheduleAtFixedRate(Runnable command,

                                       long initialDelay,
                                       long period,
                                       TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在initialDelay + 2 * period 后执行,依此类推。如果任务的任何一个执行遇到异常,则后续执行都会被取消。否则,只能通过执行程序的取消或终止方法来终止该任务。如果此任务的任何一个执行要花费比其周期更长的时间,则将推迟后续执行,但不会同时执行。
参数:
command - 要执行的任务
initialDelay - 首次执行的延迟时间
period - 连续执行之间的周期
unit - initialDelay 和 period 参数的时间单位
返回:
表示挂起任务完成的 ScheduledFuture,并且其 get() 方法在取消后将抛出异常
抛出:
RejectedExecutionException - 如果无法安排执行该任务
NullPointerException - 如果 command 为 null
IllegalArgumentException - 如果 period 小于等于 0

4.ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,

                                          long initialDelay,
                                          long delay,
                                          TimeUnit unit)
创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。如果任务的任一执行遇到异常,就会取消后续执行。否则,只能通过执行程序的取消或终止方法来终止该任务。
参数:
command - 要执行的任务
initialDelay - 首次执行的延迟时间
delay - 一次执行终止和下一次执行开始之间的延迟
unit - initialDelay 和 delay 参数的时间单位
返回:
表示挂起任务完成的 ScheduledFuture,并且其 get() 方法在取消后将抛出异常
抛出:
RejectedExecutionException - 如果无法安排执行该任务
NullPointerException - 如果 command 为 null。
IllegalArgumentException - 如果 delay 小于等于 0
例子:
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
 public static void main(String[] args) {
  Timer time = new Timer();
 
  ScheduledTest test = new ScheduledTest();
  test.beepForAnHour();
 }
 public void beepForAnHour() {
  final Runnable beeper = new Runnable() {
   public void run() {
    System.out.println("beep");
   }
  };
  final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(
    beeper, 0, 1, TimeUnit.SECONDS);
  scheduler.schedule(new Runnable() {
   public void run() {
    try {
   
    beeperHandle.cancel(true);
    beeperHandle.wait(1);
    System.out.println("==============");
    } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }, 6, TimeUnit.SECONDS);
 
 
 }
分享到:
评论

相关推荐

    ScheduledExecutorService 计时器任务处理

    ScheduledExecutorService是Java并发编程中一个非常重要的工具类,它属于ExecutorService接口的一个实现,主要用于执行定时或周期性的任务。这个服务提供了强大的定时任务管理能力,可以用来安排在未来某一时刻或者...

    自定义Java-ScheduledExecutorService定时器.jar

    这是一个jar,很秀。自定义的一个Java定时器工具类。主要是结合Spring Boot一起使用,并在Spring Boot启动的时候一起启动运行。

    ScheduledExecutorService任务定时代码示例

    ScheduledExecutorService 任务定时代码示例 ScheduledExecutorService 是 Java 中的并发编程 API,用于执行延迟或周期性的任务。下面是对 ScheduledExecutorService 的任务定时代码示例的详细解释。 ...

    基于ScheduledExecutorService的两种方法(详解)

    基于ScheduledExecutorService的两种方法详解 基于ScheduledExecutorService的两种方法是Java并发编程中的一种常见方法,用于实现定时任务的执行。ScheduledExecutorService是Java并发编程中的一种高级API,提供了...

    java实现一个小程序语句的延迟执行的小demo

    首先,Java提供了多种方式来实现延迟执行,例如使用`java.util.Timer`类、`java.util.concurrent.DelayQueue`或者`java.util.concurrent.ScheduledExecutorService`。这里我们将重点讨论`ScheduledExecutorService`...

    android-fixedtimes-ScheduledExecutorService:具有指定执行时间的ScheduledExecutorService

    您可以在工作线程上运行任务(Runnable或Callable),以指定执行计划(如ScheduledExecutorService),并指定执行时间。 介面 ScheduledFuture&lt;?&gt; schedule( Runnable command, int executeTime, long delay,...

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

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

    TaskExecutor:Java通用任务执行器,基于java.util.concurrent.ScheduledExecutorService

    Java通用任务执行程序,基于java.util.concurrent.ScheduledExecutorService。 Java通用的任务执行器,基于java.util.concurrent.ScheduledExecutorService工具类实现。 Maven: &lt;groupId&gt;...

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

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

    serial-executor-service:ScheduledExecutorService 的测试实用程序实现

    ScheduledExecutorService 的测试实用程序实现 允许测试如下代码: class Foo { private int count = 0; public Foo(ScheduledExecutorService service, Bar bar) { service.scheduleAtFixedRate(new Runnable...

    java 写的定时器

    在Java中,有两种主要的定时器类:`java.util.Timer` 和 `java.util.concurrent.ScheduledExecutorService`。本文将详细讲解这两种定时器的用法、优缺点以及如何在实际项目中应用它们。 ### 1. `java.util.Timer` ...

    java定时执行代码.

    Java提供了多种实现定时任务的机制,这里主要介绍两种:Java.util.Timer类和java.util.concurrent.ScheduledExecutorService接口。 1. Java.util.Timer类: Timer类是Java早期提供的定时任务工具,它可以安排在...

    java 实现调度器

    这通常是通过Java中的`java.util.Timer`类或者`java.util.concurrent.ScheduledExecutorService`来实现的。这两个工具提供了不同的功能和使用场景,让我们一一进行深入探讨。 首先,我们来看`java.util.Timer`类。...

    java Schedule

    在Java中,我们可以使用多种库和工具来创建和管理定时任务,如Java的内置API `java.util.Timer` 和 `java.util.concurrent.ScheduledExecutorService`。这两个类提供了丰富的功能,帮助开发者在特定时间或周期性地...

    java在服务启动的时候启动定时器

    在Java中,我们可以使用多种库来实现这个功能,其中最常用的两个是`java.util.Timer`和`java.util.concurrent.ScheduledExecutorService`。 ## 1. `java.util.Timer` `Timer`类是Java标准库中的一个基础定时器,...

    Java调度原理及使用.docx

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

    Java计时器

    我们可以使用`Executors`类的静态方法创建一个ScheduledExecutorService实例,然后通过`schedule()`, `scheduleAtFixedRate()` 或 `scheduleWithFixedDelay()` 方法来安排任务。ScheduledExecutorService相比Timer有...

    几种定时任务(Timer、TimerTask、ScheduledFuture)的退出—结合真实案例【JAVA并发】.docx

    ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(3); ``` 然后,我们可以通过ScheduledExecutorService的scheduleWithFixedDelay()或scheduleAtFixedRate()方法来安排任务...

    Android线程池管理的代码例子

    本示例将详细介绍如何在Android中使用两种主要的线程池:ThreadPoolExecutor和ScheduledExecutorService。 ThreadPoolExecutor是Java并发库中提供的一个基础线程池实现,它允许开发者自定义核心线程数、最大线程数...

Global site tag (gtag.js) - Google Analytics