ScheduledExecutorService接口的学习和使用

ScheduledExecutorService 扩展了ExecutorService接口,提供时间排程的功能

实验结果:

实验源码:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;


/**
 * ScheduledExecutorService 测试
 */
public class ScheduledThreadPoolTest {


private final static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
static SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd dd:mm:ss");
public static void main(String[] args) {
beepForTime();
}


/**
 * beepForTime
 */
public static void beepForTime() {
//要执行的任务
final Runnable beeper = new Runnable() {
int i = 0;


public void run() {
System.out.println("beep:" + (i++) + "----"+ sf.format(new Date(System.currentTimeMillis())));
// throw new RuntimeException();


// 任务耗时2秒
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};


int startTime = 3;
int each = 5;
System.out.println("任务将于" + startTime + "秒后开始,每" + each + "秒执行1次,每次执行时间2秒");


/**
 * 每each秒执行一次任务,两次任务的执行间隔是each秒(前面定义的变更)
 * 
 * 
 * 创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期; 也就是将在 initialDelay 后开始执行,然后在
 * initialDelay+period 后执行, 接着在 initialDelay + 2 * period
 * 后执行,依此类推。如果任务的任何一个执行遇到异常, 则后续执行都会被取消。否则,只能通过执行程序的取消或终止方法来终止该任务。
 * 如果此任务的任何一个执行要花费比其周期更长的时间,则将推迟后续执行,但不会同时执行。 参数: command - 要执行的任务
 * initialDelay - 首次执行的延迟时间 period - 连续执行之间的周期 unit - initialDelay 和
 * period 参数的时间单位
 * 
 */
// final ScheduledFuture<?> beeperHandle =
// scheduler.scheduleAtFixedRate(beeper, startTime, each,
// TimeUnit.SECONDS);


/**
 * 
 * 每each秒执行一次任务,两次任务的执行间隔是each秒(前面定义的变更)+任务执行用时
 * 
 * 创建并执行一个在给定初始延迟后首次启用的定期操作, 随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。
 * 如果任务的任一执行遇到异常,就会取消后续执行。 否则,只能通过执行程序的取消或终止方法来终止该任务。 参数: command -
 * 要执行的任务 initialDelay - 首次执行的延迟时间 period - 连续执行之间的周期 unit -
 * initialDelay 和 period 参数的时间单位
 * 
 */
final ScheduledFuture<?> beeperHandle = scheduler.scheduleWithFixedDelay(beeper, startTime, each, TimeUnit.SECONDS);


/**
 * 创建并执行在给定延迟后启用的一次性操作。
 * 
 * 这里用于在N时间后取消任务
 */
final Runnable cancelBeeper = new Runnable() {
public void run() {
System.out.println("取消任务");
beeperHandle.cancel(true);
}
};
scheduler.schedule(cancelBeeper, 60, TimeUnit.SECONDS); 
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值