Java併發編程知識點總結(二十一)——FutureTask的應用

(一)、FutureTask概述

  1. FutureTask的應用場景主要是一個線程需要等待另一個線程的時候可以使用,FutureTask的get()方法會使當前線程阻塞,直到目標線程完成任務返回結果,纔會繼續往下執行。
  2. FutureTask最大的特點就是支持取消任務。
  3. FutureTask的run()方法主要有以下三種狀態:
狀態 具體描述
未啓動狀態 在FutureTask.run()方法執行之前,處於未啓動狀態
已啓動狀態 FutureTask.run()方法已經執行了,但是任務還未執行完
已完成狀態 run()方法已經執行完成

在這裏插入圖片描述
4. 針對上面的三種狀態,FutureTask.cancel()方法也對應有三種取消時間

取消時的狀態 具體描述
未啓動狀態 執行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) {

        }

    }

在這裏插入圖片描述
可以看到主線程會等待副線程全部執行完畢才返回結果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章