Open woshikid opened 3 years ago
Timer timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { System.out.println("running"); } }; // TimerTask只能被schedule一次 // Timer使用单线程执行任务,因此TimerTask不会并发执行 // TimerTask抛出异常时则整个Timer停止运行 timer.schedule(task, new Date()); // 在指定时间执行一次 //timer.schedule(task, 10000); // 在指定延时后执行一次 //timer.schedule(task, new Date(), 3000); // 在指定时间后按指定间隔重复执行,对于错过的执行不进行补偿 //timer.schedule(task, 10000, 3000); // 在指定延时后按指定间隔重复执行,对于错过的执行不进行补偿 //timer.scheduleAtFixedRate(task, new Date(), 3000); // 在指定时间后按指定间隔重复执行,对于错过的执行会进行补偿 //timer.scheduleAtFixedRate(task, 10000, 3000); // 在指定延时后按指定间隔重复执行,对于错过的执行会进行补偿 task.cancel(); // 结束此任务 timer.cancel(); // 结束Timer timer.purge(); // 清除TimerTask引用,GC友好
// 不同的任务可以并发执行,但同一任务不会并发执行 // 任务抛出异常时则该任务停止运行 ScheduledExecutorService executor = Executors.newScheduledThreadPool(8); ScheduledFuture<?> future = executor.schedule(task, 10, TimeUnit.SECONDS); // 在指定延时后执行一次 //ScheduledFuture<?> future = executor.scheduleAtFixedRate(task, 10, 3, TimeUnit.SECONDS); // 在指定延时后按指定间隔重复执行,对于错过的执行会进行补偿 //ScheduledFuture<?> future = executor.scheduleWithFixedDelay(task, 10, 3, TimeUnit.SECONDS); // 在指定延时后按上次执行结束后的指定间隔重复执行 future.cancel(false); // 结束此任务 executor.shutdown(); // 结束ScheduledExecutorService
Timer
ScheduledExecutorService