java併發程式設計學習2 Future

2021-09-14 05:05:33 字數 1612 閱讀 9082

inte***ce future,表示非同步計算的結果,future有個get方法而獲取結果只有在計算完成時獲取,否則會一直阻塞直到任務轉入完成狀態,然後會返回結果或者丟擲異常。相對於繼承thread來建立執行緒方式,使用runnable可以讓你的實現類同時實現多個介面,而相對於callable及future,runnable方法並不返回任務執行結果且不能丟擲異常。

public inte***ce future
補充:

- futuretask:包裝器,可以將callable轉換成為future與runnable,它同時實現了二者的介面。

- callable:可以為非同步方法返回計算結果。

public class exercise 

}public string query() throws interruptedexception

}

每個非同步方法都需要新開啟乙個執行緒這樣很消耗資源。

每次都要new乙個thread挺麻煩的。

構建乙個新的執行緒是有代價的,因為設計到與作業系統的互動。如果程式中建立了大量的並且生命週期很短的執行緒,我們應該使用執行緒池。

乙個執行緒池包含很多準備執行的空閒執行緒,每當run()執行完畢後,執行緒不會死亡而是回到執行緒池準備為下乙個請求提供服務。

另乙個使用執行緒池的理由是減少併發執行緒數。建立大量執行緒會大大降低效能甚至拖垮虛擬機器。

executors類有許多靜態方法可建立執行緒池。例如:

核心(簡介):

threadpoolexecutor

public class threadpoolexecutor extends abstractexecutorservice
引數含義:

使用連線池應該做的事:

1. 呼叫executors的靜態方法建立執行緒池。

2. 呼叫submit(),提交乙個callable物件或者runnable物件。

3. 儲存好獲得的future<>物件,其中是計算結果(如果提交的是callable)。

4. 沒有任何任務再提交的時候使用shutdown()。

public class taskexercise 

}class calltask implements callable

}class runtask implements runnable

}

有時使用執行器更有意義的場景是控制一組相關任務。

1. shutdownnow():取消所有任務

2. invokeany():提交所有物件到乙個callable物件集合,並返回某個已完成的任務結果。例如:如果你願意接受任何一種解決方案的話。

3. 還有其他一些方法等我們真正用到時再學習好了~

spring中實現非同步呼叫:spring為任務排程與非同步方法執行提供了註解支援。通過在方法上設定@async註解,可使得方法被非同步呼叫。也就是說呼叫者會在呼叫時立即返回,而被呼叫方法的實際執行是交給spring的taskexecutor來完成。如果是有返回值的話記得:介面返回future<>,實現返回asyncresult<>。

java併發程式設計學習2 Future

future的概念 inte ce future,表示非同步計算的結果,future有個get方法而獲取結果只有在計算完成時獲取,否則會一直阻塞直到任務轉入完成狀態,然後會返回結果或者丟擲異常。相對於繼承thread來建立執行緒方式,使用runnable可以讓你的實現類同時實現多個介面,而相對於ca...

JAVA併發程式設計學習

併發程式設計主要目的是為了在相同的時間內讓程式執行得更快或者處理更多的任務。為了實現這一目的,併發程式設計會面臨很多的挑戰。併發程式設計必然會帶來多執行緒之間的問題,比如上下文之間的切換,執行緒死鎖,以及硬體資源的限制。無論是單核還是多核處理器都支援多執行緒。在單核處理器中,cpu會給每個執行緒分配...

Java併發程式設計實踐(2)

1 同步容器類 hashmap和hashtable的區別 hashmap底層繼承abstractmap抽象類,並實現map介面,hashtable底層繼承dictionary類並實現map介面 hashmap初始話大小為16而hashtable初始化大小為11,hashmap是非執行緒安全的而has...