通过Timer和ScheduledThreadPoolExecutor实现延迟任务

Timer实现:

public void timer(){
    Timer timer = new Timer();
    System.out.println("star...");
    //5000毫秒后开始执行,每隔2000毫秒执行一次
    timer.schedule(new TimerTask(){
        Long t = System.currentTimeMillis();
        @Override
        public void run() {
            System.out.println("run...");
            System.out.println("time="+(System.currentTimeMillis() - t));
        }
    },5000, 2000);
    System.out.println("end...");
}

 

ScheduledThreadPoolExecutor实现:

/**
 * @param time: 延迟的时间
 * */
public void schedule(Integer time){
    ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(3);
    System.out.println("start...");
    executor.schedule(new Runnable() {
        @Override
        public void run() {
            System.out.println("run...");
        }
    },time, TimeUnit.SECONDS);
    System.out.println("end...");
}
ScheduledThreadPoolExecutorTimer是用于实现定时任务调度的类。二者有一些相似之处,但也有很多不同之处。 ScheduledThreadPoolExecutor是Java5引入的类,它实现了ExecutorService接口,提供了更强大和灵活的定时任务调度功能。它可以执行一次任务,也可以执行循环任务,支持延迟执行和周期性执行。相比之下,Timer类只能执行一次任务或循环任务,并且不支持延迟执行。 使用ScheduledThreadPoolExecutor可以更好地控制任务执行。它提供了更多的参数来控制任务执行时间、间隔和延迟。同时,ScheduledThreadPoolExecutor还提供了更多的方法来管理和监控任务的状态,例如取消任务、获取任务执行结果等。 另外,ScheduledThreadPoolExecutor采用了线程池的方式管理线程,可以更好地管理并发执行任务。它可以根据需要创建和回收线程,并且可以限制同时执行任务数量,提高了性能和资源利用率。而Timer类则是在一个单独的线程中执行任务,不能灵活地管理线程。 总的来说,如果你需要更灵活、可控、高性能的定时任务调度功能,推荐使用ScheduledThreadPoolExecutor。它提供了更多的功能和扩展性,适合在新的代码中使用。而如果你只是简单地执行一次任务或循环任务,并且不需要太多的控制和管理,可以考虑使用Timer类。 来源: https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html 来源: https://www.binghe.io/archives/188.html 来源: https://www.binghe.io/archives/188.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值