目录
scheduledExecutorService.scheduled
scheduledExecutorService.scheduled
等待执行时间之后,运行任务。(任务,延迟时间,延迟时间单位)
ScheduledExecutorService.schedule(Callable<String> callable, long delay, TimeUnit unit)
一、主程序
创建5个任务,分别延迟1 2 3 4 5 秒执行,然后等待任务完成。
package xyz.jangle.thread.test.n4_6.schedule;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* 4.6、schedule 在执行器内延迟执行任务
* 创建5个任务,分别延迟1 2 3 4 5 秒执行,然后等待任务完成。
*
* 注:如果希望在指定时间执行任务, 则计算当前到指定时间的间隔。
* @author jangle
* @email jangle@jangle.xyz
* @time 2020年8月21日 下午7:00:39
*
*/
public class M {
public static void main(String[] args) {
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
/*
// ScheduledThreadPoolExecutor threadPool = (ScheduledThreadPoolExecutor) scheduledExecutorService;
// 设置false的情况下,会使得调用shutdown()后,未执行的延迟任务不再执行(默认是true,继续执行延迟的任务)
// threadPool.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
*/
System.out.println("Main:开始执行主程序" + new Date());
for (int i = 0; i < 5; i++) {
Task task = new Task("Task " + i);
// 执行task任务,延迟i+1秒执行。
scheduledExecutorService.schedule(task, i + 1, TimeUnit.SECONDS);
}
// shutdown 之后,是否继续执行延迟任务受属性executeExistingDelayedTasksAfterShutdown影响
scheduledExecutorService.shutdown();
try {
// 等待所有任务执行完毕,最长等待2天时间。
scheduledExecutorService.awaitTermination(2, TimeUnit.DAYS);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main:结束执行" + new Date());
}
}
二、任务
package xyz.jangle.thread.test.n4_6.schedule;
import java.util.Date;
import java.util.concurrent.Callable;
/**
* 普通的任务
* @author jangle
* @email jangle@jangle.xyz
* @time 2020年8月21日 下午7:02:27
*
*/
public class Task implements Callable<String> {
private final String name;
public Task(String name) {
super();
this.name = name;
}
@Override
public String call() throws Exception {
System.out.println(this.name + "开始执行任务" + new Date());
return "hello,schedule task";
}
}
三、执行结果
Main:开始执行主程序Fri Aug 21 19:19:40 CST 2020
Task 0开始执行任务Fri Aug 21 19:19:41 CST 2020
Task 1开始执行任务Fri Aug 21 19:19:42 CST 2020
Task 2开始执行任务Fri Aug 21 19:19:43 CST 2020
Task 3开始执行任务Fri Aug 21 19:19:44 CST 2020
Task 4开始执行任务Fri Aug 21 19:19:45 CST 2020
Main:结束执行Fri Aug 21 19:19:45 CST 2020

本文介绍如何使用ScheduledExecutorService在Java中实现定时任务。通过创建5个任务并分别设置1到5秒的延迟时间,演示了如何调度这些任务在特定时间后执行。文章详细展示了代码实现过程,包括主程序的设定、任务的定义以及执行结果。
3478

被折叠的 条评论
为什么被折叠?



