ScheduleExecutorService执行周期性任务

常用方法一:
scheduleAtFixedRate(Runable command,long initialDelay,long period,TimeUnit.unit)
启动项目,initialDelay后开始执行程序,然后每过period时间周期性执行。
也就是第二次执行是在initialDelay+period执行。第三次执行在initialDelay+2*period执行

具体测试代码如下:

public class ScheduleTest {
private static final Logger log = LoggerFactory.getLogger(ScheduleTest.class);
public static ScheduledExecutorService fixedThreadPool = Executors.newScheduledThreadPool(3);

public static void main(String[] args) {
log.info(Thread.currentThread().getName()+"开始运行!"+new Date().toString());
fixedThreadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {

log.info(Thread.currentThread().getName()+"运行成功!"+new Date().toString());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},10,10,TimeUnit.SECONDS);
}
}



执行结果(验证没有问题)


常用方法二:
scheduleWithFixedDelay(Runnable command,long initialDelay.long delay,TimeUnit.unit)
启动项目,initialDelay后开始执行程序,然后每过执行完本次程序所用的时间+period时间周期性执行。在每一次执行终止到下一次要执行的时间差事delay


具体测试代码如下:

public class ScheduleTest2 {
private static final Logger log = LoggerFactory.getLogger(ScheduleTest2.class);
public static ScheduledExecutorService fixedThreadPool = Executors.newScheduledThreadPool(3);

public static void main(String[] args) {
log.info(Thread.currentThread().getName()+"开始运行!"+new Date().toString());
fixedThreadPool.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
log.info(Thread.currentThread().getName()+"运行成功!"+new Date().toString());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},10,10,TimeUnit.SECONDS);
}
}
执行结果(验证没有问题)

猜你喜欢

转载自blog.csdn.net/marjianjiandandan/article/details/80894046