java并发工具包-ScheduleService

1. TimerTask:

  1. 存在的缺陷:若执行的任务超时,会导致,定时只能在任务之后完成之后,才能接着执行。
private static void useTimerTask() {
    Timer timer = new Timer();
    TimerTask task = new TimerTask() {       
    	 @Override
        public void run() {            
        	System.out.println("Task : " + System.currentTimeMillis());
            try {                
            	TimeUnit.SECONDS.sleep(5);
            } catch (InterruptedException e) {                
            	e.printStackTrace();
            }        
       }
    };

    // 设置的定时时1s, 但是因为task中任务花费的时候为5s;
    // 因此会导致, 定时任务的定时混乱. 没有达到设置的定时要求.
    timer.schedule(task, 0, 1000);
}

2. ScheduleService

  1. 定时任务规则:若任务执行时间大于定时时间间隔, 则按照任务执行时间来不断执行。

private static void testScheduleAtFixedRate() {
    ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);

    executor.scheduleAtFixedRate(
    () -> { // 若任务执行时间大于定时时间间隔, 则按照任务执行时间来不断执行.
        try {            
        	TimeUnit.SECONDS.sleep(5);
        } catch (InterruptedException e) {            
        	e.printStackTrace();
        }
        System.out.println(System.currentTimeMillis());
        System.out.println(Thread.currentThread().getName());
    }, 1, 2, TimeUnit.SECONDS);
}
  1. API
    1. setContinueExistingPeriodicTasksAfterShutdownPolicy:设置为true时,调用了shutdown(),依然会定时的去执行任务。
    2. setExecuteExistingDelayedTasksAfterShutdownPolicy:当调用shutdown()时,退出执行的任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值