当前位置:嗨网首页>书籍在线阅读

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() 方法。在控制台打印日志记录的实际时间并返回其他文本,如“ Helloworld ”:

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());