Java并发编程知识点总结(十九)——FutureTask的应用

(一)、FutureTask概述

  1. FutureTask的应用场景主要是一个线程须要等待另外一个线程的时候能够使用,FutureTask的get()方法会使当前线程阻塞,直到目标线程完成任务返回结果,才会继续往下执行。
  2. FutureTask最大的特色就是支持取消任务。
  3. FutureTask的run()方法主要有如下三种状态:
状态 具体描述
未启动状态 在FutureTask.run()方法执行以前,处于未启动状态
已启动状态 FutureTask.run()方法已经执行了,可是任务还未执行完
已完成状态 run()方法已经执行完成

在这里插入图片描述
4. 针对上面的三种状态,FutureTask.cancel()方法也对应有三种取消时间java

取消时的状态 具体描述
未启动状态 执行FutureTask.cancel()方法将此任务永远不会执行
已启动状态 执行FutureTask.cancel(true)方法将以中断线程的方式来阻止任务继续进行,若是执行FutureTask.cancel(false)将不会对正在执行任务的线程有任何影响;
已完成状态 执行FutureTask.cancel(…)方法将返回false

在这里插入图片描述

(二)、FutureTask具体应用

public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
               for (int i = 0; i < 10; i++) {
                   try {
                       Thread.sleep(100);
                       System.out.println("第" + i +"次运行结束");
                   }catch (InterruptedException e) {
                       e.printStackTrace();
                   }

               }
            }
        };
        FutureTask futureTask = new FutureTask(runnable,"gogo");
        new Thread(futureTask).start();
        try {
            futureTask.get();
            System.out.println("程序执行完毕");
        } catch (Exception e) {

        }

    }

在这里插入图片描述
能够看到主线程会等待副线程所有执行完毕才返回结果。web