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

罔少年

QQ 332256483

 
 
 

日志

 
 

ScheduledExecutorService 周期函数  

2015-07-07 14:59:47|  分类: android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
之前在项目中实现一个轮播图片的功能。用的是Timer+TimerTask+handler实现
ScheduledExecutorService 在功能及用法上都基本和上面的Timer相同

区别
Timer 基于绝对时间,如果TimerTask抛出未检查的异常,Timer将会产生无法预料的行为,单线程任务
ScheduledExecutorService  基于相对时间,可以抛出异常,不影响下次线程任务,支持并发执行任务

方法说明
1、scheduleAtFixedRate 周期执行任务,不管上一次任务是否已经完成

/**
* 初始化延迟0ms开始执行,每隔100ms重新执行一次任务。
*/
public static void executeFixedRate() {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(
new EchoServer(),
0,
100,
TimeUnit.MILLISECONDS);
}


2、scheduleWithFixedDelay 指定频率间隔执行某个任务。即在上一个任务完成后,指定时间后执行下一个,如此循环

/**
* 以固定延迟时间进行执行
* 初始化时延时0ms开始执行,本次执行结束后延迟100ms开始下次执行。
*/
public static void executeFixedDelay() {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleWithFixedDelay(
new EchoServer(),
0,
100,
TimeUnit.MILLISECONDS);
}

具体用法

class MyServer implements Runnable {
@Override
public void run() {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("This is a echo server. The current time is " +
System.currentTimeMillis() + ".");
}
}


/**
* 每天晚上8点执行一次
* 每天定时安排任务进行执行
*/
public static void executeEightAtNightPerDay() {
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
long oneDay = 24 * 60 * 60 * 1000;
long initDelay = getTimeMillis("20:00:00") - System.currentTimeMillis();
initDelay = initDelay > 0 ? initDelay : oneDay + initDelay;

executor.scheduleAtFixedRate(
new
MyServer(),
initDelay,
oneDay,
TimeUnit.MILLISECONDS);
}



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

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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