注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

ScheduledExecutorService  

2010-10-05 16:48:14|  分类: JAVA执行器 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
ScheduledExecutorService
所有超级接口:
    Executor, ExecutorService
所有已知实现类:
    ScheduledThreadPoolExecutor
public interface ScheduledExecutorService
extends ExecutorService
    ScheduledExecutorService是一个 ExecutorService但是可安排在给定的延迟后运行或定期执行的命令
schedule方法使用各种延迟创建任务,并返回一个可用于取消或检查执行的任务的ScheduledFuture对象
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:它只有一个实现类ScheduledThreadPoolExecutor
关于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<?> schedule(Runnable command,
                            long delay,
                            TimeUnit unit)
    创建并执行在给定延迟后启用的一次性操作。
    参数:
        command - 要执行的任务
        delay - 从现在开始延迟执行的时间
        unit - 延迟参数的时间单位 
    返回:
        表示挂起任务完成的 ScheduledFuture,并且其 get() 方法在完成后将返回 null 
    抛出:
        RejectedExecutionException - 如果无法安排执行该任务 
        NullPointerException - 如果 command 为 null
<V> ScheduledFuture<V> schedule(Callable<V> callable,
                                long delay,
                                TimeUnit unit)
    创建并执行在给定延迟后启用的 ScheduledFuture。
    参数:
        callable - 要执行的功能
        delay - 从现在开始延迟执行的时间
        unit - 延迟参数的时间单位 
    返回:
        可用于提取结果或取消的 ScheduledFuture 
    抛出:
        RejectedExecutionException - 如果无法安排执行该任务 
        NullPointerException - 如果 callable 为 null
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
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

  评论这张
 
阅读(3622)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017