重复的固定延迟执行 java
来源:互联网 发布:软件销售代理商 编辑:程序博客网 时间:2024/05/01 16:31
老大让把以前的定时改成固定延迟的策略,即把以前固定的15分钟执行的任务改成没15分钟执行一次,但是如果上一次在15分钟没执行完毕,就等它执行完毕再执行(别管什么任务居然可以执行15分钟.......是个javamail收信的问题,可能会卡收信好几天...一直找不到好的方法).查了下API,Time.schedule(TimerTask task, long delay, long period)好像可以做到,但是它的doc我貌似看不太明白,好吧,是这样的(我用的是
sun中文技术社区翻译的中文,我承认我英语没过4级):
在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。从长期来看,执行的频率一般要稍慢于指定周期的倒数(假定Object.wait(long) 所依靠的系统时钟是准确的)。
固定延迟执行适用于那些需要“平稳”运行的重复活动。换句话说,它适用于在短期运行中保持频率准确要比在长期运行中更为重要的活动。这包括大多数动画任务,如以固定时间间隔闪烁的光标。这还包括为响应人类活动所执行的固定活动,如在按住键时自动重复输入字符。
task
- 所要安排的任务。delay
- 执行任务前的延迟时间,单位是毫秒。period
- 执行各后续任务之间的时间间隔,单位是毫秒。 IllegalArgumentException
- 如果 delay 是负数,或者delay + System.currentTimeMillis() 是负数。 IllegalStateException
- 如果已经安排或取消了任务,已经取消了计时器,或者计时器线程已终止。- package com.hcycom.lan.test;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Random;
- import java.util.Timer;
- import java.util.TimerTask;
- public class DelayTestextends TimerTask {
- private Random d = new Random(System.currentTimeMillis());
- private DateFormat df = new SimpleDateFormat("HH:mm:ss SSS");
- @Override
- public void run() {
- System.out.println(df.format(new Date()));
- try {
- int i = d.nextInt(20000);
- Thread.sleep(i);
- System.out.println("sleep " + i);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- public staticvoid main(String[] args) {
- new Timer().schedule(new DelayTest(),0, 10000);
- }
- }
package com.hcycom.lan.test;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Random;import java.util.Timer;import java.util.TimerTask;public class DelayTest extends TimerTask {private Random d = new Random(System.currentTimeMillis());private DateFormat df = new SimpleDateFormat("HH:mm:ss SSS");@Overridepublic void run() {System.out.println(df.format(new Date()));try {int i = d.nextInt(20000);Thread.sleep(i);System.out.println("sleep " + i);} catch (InterruptedException e) {e.printStackTrace();}}public static void main(String[] args) {new Timer().schedule(new DelayTest(), 0, 10000);}}
- 重复的固定延迟执行 java
- java 延迟执行代码
- iOS点击事件重复执行(取消延迟执行函数)
- 延迟执行的一个例子
- 关于Javascript的延迟执行
- ios的延迟执行方法
- ios的延迟执行方法
- ios的延迟执行方法
- iOS 延迟执行的方式
- 延迟执行的常用方法
- vue事件的延迟执行
- 执行延迟IOS关于取消延迟执行函数的种种
- 多线程GCD+同步执行+异步执行+并行执行+串行执行+重复、分组、延迟、障碍方法
- java 延迟执行代码(定时作用)
- Java ScheduledThreadPoolExecutor延迟或周期性执行任务
- Java ScheduledThreadPoolExecutor延迟或周期性执行任务
- Java ScheduledThreadPoolExecutor延迟或周期性执行任务
- Android,Java延迟两秒执行
- VBA Tips:为VBA program添加数字签名
- cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
- <c:if>判断参数是否为空
- cocos2d学习笔记(八)物理引擎box2d之二
- POJ 3169 Layout (差分约束#5)
- 重复的固定延迟执行 java
- MFC 判断鼠标是否在控件范围内
- 访问者模式(Visitor Pattern)
- Oracle 查看有哪些表被锁住
- xss漏洞和csrf漏洞防御
- shader与cg简介
- String 类型与 char 类型比较
- poj 1275 Cashier Employment(差分约束#6)
- EventAction和subscription的配置过程