21-案例实现
案例实现
根据如下步骤实现本案例。
1.创建一个名为 Task
的类。该类实现了 Callable
接口,这个接口参数为 String
类:
public class ExecutableTask implements Callable<String> {
2.声明一个名为 name
的私有 String
变量,并用其存储任务名称:
private final String name;
3.实现该类的构造方法并初始化全部变量:
public Task(String name) {
this.name=name;
}
4.实现 call()
方法。在控制台打印日志记录的实际时间并返回其他文本,如“ Hello
, world
”:
public String call() throws Exception {
System.out.printf("%s: Starting at : %s\n",name,new Date());
return "Hello, world";
}
5.至此,开始实现应用程序的入口,创建包含 main()
方法的 Main
类:
public class Main {
public static void main(String[] args) {
6.用 Executors
类中 newScheduledThreadPool()
方法创建一个 Scheduled- ThreadPoolExecutor
类型的执行器,传入1作为参数:
ScheduledExecutorService executor=Executors
.newScheduledThreadPool(1);
7.用 ScheduledThreadPoolExecutor
实例对象的 schedule()
方法初始化并启动5个任务:
System.out.printf("Main: Starting at: %s\n",new Date());
for (int i=0; i<5; i++) {
Task task=new Task("Task "+i);
executor.schedule(task,i+1 , TimeUnit.SECONDS);
}
8.调用 shutdown()
方法关闭执行器:
executor.shutdown();
9.调用执行器的 awaitTermination()
方法等待全部任务结束:
try {
executor.awaitTermination(1, TimeUnit.DAYS);
} catch (InterruptedException e) {
e.printStackTrace();
}
10.打印信息以表明程序将要结束:
System.out.printf("Main: Ends at: %s\n",new Date());