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