多執行緒知識點(五)Future與Callable

2021-09-02 18:54:27 字數 1793 閱讀 4216

1.什麼是callable 

是乙個多執行緒的實現方案,與thread和runable不同的是,callable需要重寫call方法,並且call方法是有返回值的,通過.get方法呼叫

2.future模式的核心

去除了主函式的等待時間,並使得原本需要等待的時間段可以用於處理其他業務邏輯

3.future常用方法:

1)v get():獲取非同步執行的結果,如果沒有結果可用,此方法會阻塞,直到非同步計算完成。

2)v get(long timeout,timeunit unit)在get方法基礎上增加阻塞時間限制,超過時間,丟擲異常。

3)boolean isdone():任務執行結束後,無論是否為正常結束還是發生異常,都返回true。

4)boolean iscanceller():如果任務完成前被取消,則返回true。

5)boolean cancel(boolean mayinterruprunning):如果任務還沒開始,執行cancel(...)方法將返回false;如果任務已經啟動,執行cancel(true)方法,將中斷執行此任務執行緒的方式來試圖停止任務,如果停止成功,返回ture;當任務已啟動,執行cancel(false)方法將不會對正在執行的任務執行緒產生影響(讓執行緒正常執行到完成),此時返回false;當任務已經完成,執行 cancel(false)方法將返回false。maylnterruprunning引數表示是否中斷執行的執行緒

大體總結為三點:

1)能夠中斷執行中的任務

2)判斷任務是否執行完成

3)獲取任務執行完成後結果

4.手動實現future思路

package com.test;

//公共data資料結果

public abstract class data

package com.test;

//獲取真實資料

public class realdata extends data catch (interruptedexception e)

system.out.println("操作執行完畢。。。");

this.result = "執行結果1111";

} @override

public string getrequest()

}

package com.test;

//當有執行緒逍遙獲取realdata的時候,程式會被阻塞。等到realdata被注入才會使用getreal()方法。

public class futuredata extends data

//如果falg為false,沒有獲取到資料,傳遞realdata物件

this.realdata = realdata;

flag = true;

notify();

} @override

public synchronized string getrequest() catch (interruptedexception e)

} return realdata.getrequest();

}}

package com.test;

public class futureclient

}).start();

return futuredata;

}}

package com.test;

public class main

}

C 多執行緒 知識點記錄

今天接觸了c語言中的多執行緒,在這裡記錄一下 第一步 引入標頭檔案pthread.h include 第二步 運用函式 pthread t 建立執行緒控制代碼 pthread create 建立執行緒 引數 第乙個引數執行緒控制代碼 第二個引數null就行 第三個引數是函式名型別 void 第四個引...

多執行緒之知識點

多執行緒的學習 1.都不是原子操作,在多執行緒中值可能被改變 因此在多執行緒環境中對乙個變數進行讀寫時,我們需要有一種方法能夠保證對乙個值的遞增操作是原子操作 即不可打斷性,乙個執行緒在執行原子操作時,其它執行緒必須等待它完成之後才能開始執行該原子操作。這種涉及到硬體的操作會不會很複雜了,幸運的是,...

多執行緒知識點總結

多執行緒的問題主要圍繞3個問題處理 1.原子性,2.可見性,3.有序性 1.原子性,不可被其他執行緒打斷的操作。如read.write sychronized 2.可見性 一條執行緒修改了某值,新值對其他執行緒立即可知 普通變數是通過主記憶體完成多執行緒的共享,因此在多執行緒的情況下,很多髒資料。v...