29-案例实现
案例实现
根据如下步骤实现本案例。
1.创建一个实现 Callable 接口且泛型为 String 的名为 Task 的类,并实现 call() 方法。在该方法中循环打印信息到控制台,并休眠100ms:
public class Task implements Callable<String> {
@Override
public String call() throws Exception {
while (true){
System.out.printf("Task: Test\n");
Thread.sleep(100);
}
}
2.至此,我们可以开始实现应用程序的入口,创建包含 main() 方法的 Main 类:
public class Main {
public static void main(String[] args) {
3.用 Executors 类中的 newCachedThreadPool() 方法创建一个 ThreadPool- Executor 实例对象:
ThreadPoolExecutor executor=(ThreadPoolExecutor)Executors
.newCachedThreadPool();
4.创建一个新的 Task 实例对象:
Task task=new Task();
5.用 submit() 方法提交任务给执行器:
System.out.printf("Main: Executing the Task\n");
Future<String> result=executor.submit(task);
6.让主线程休眠2s:
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
7.通过 submit() 方法返回一个名为 name 的 Future 实例对象,在该对象中调用 cancel() 方法来取消执行当前任务,并向 cancel() 方法传入 true 值作为参数:
System.out.printf("Main: Canceling the Task\n");
result.cancel(true);
8.在控制台打印调用 isCancelled() 方法和 isDone() 方法的信息,来判断任务是否已取消或者执行完成:
System.out.printf("Main: Canceled: %s\n",result.isCancelled());
System.out.printf("Main: Done: %s\n",result.isDone());
9.调用 shutdown() 方法来终止执行器,并在控制台打印信息表明程序已经终止:
executor.shutdown();
System.out.printf("Main: The executor has finished\n");