JAVA7併發程式設計手冊筆記

2021-07-23 11:27:27 字數 2681 閱讀 3700

isinterrupted:不能改變interrupted屬性值,只是返回這個屬性的值;      thread類的靜態方法interrupted設定interrupted屬性為false。推薦使用isinterrupted()

deuqe 雙端佇列

uncaughtexceptionhandler介面   實現    uncaughtexception()方法列印異常,跑出異常的執行緒** thread.setuncaughtexceptionhandler()

4. readwritelock解決了這個問題,當寫操作時,其他執行緒無法讀取或寫入資料,而當讀操作時,其它執行緒無法寫入資料,但卻可以讀取資料

5  

semaphore(int permits, boolean fair)   fair執行緒是否公平獲取

訊號量(semaphore)可以允許多個執行緒訪問,每次

acquire()數量減1,每次

release() 數量加1,當數量為0的時候將不允許執行緒進入

6 countdownlatch類  :初始化數量,在未達到0之前一直在awai(),其他方法呼叫countdown();方法減1,當計數器達到0的時候

countdownlatch喚醒等待的執行緒,也可以設定當超過一定時間不再等待直接執行。例子開會的時候等人,沒到一人減1,當人到齊後會議開始。

只准進入一次。

7 cyclicbarrier 等待所有執行緒準備就緒,所有執行緒再一起執行

countdownlatch 某個執行緒等待其他執行緒完成,然後在執行

phaser     分多個階段同步執行緒,當某個執行緒沒有滿足條件完成該階段,其他執行緒不需要等待該執行緒,當所有完成該階段的執行緒都完成了,所有執行緒才會繼續下乙個階段。

當乙個執行緒到達exchange呼叫點時,如果它的夥伴執行緒此前已經呼叫了此方法,那麼它的夥伴會被排程喚醒並與之進行物件交換,然後各自返回。如果它的夥伴還沒到達交換點,那麼當前執行緒將會被掛起,直至夥伴執行緒到達——完成交換正常返回;或者當前執行緒被中斷——丟擲中斷異常;又或者是等候超時——丟擲超時異常

exchangerexchanger;

exchanger.exchange(data);

8. threadpoolexecutor      list>> r = null; r 接受callable返回的結果物件result

invokeany() 返回任務list中的第乙個返回結果

invokeall() 返回任務list中的所有返回結果

9.  

linkedblockingqueue   阻塞佇列

其中主要用到put和take方法,put方法在佇列滿的時候會阻塞直到有佇列成員被消費,take方法在佇列空的時候會阻塞,直到有佇列成員被放進來

先進先出等特性,是作為生產者消費者的首選

可以指定容量,也可以不指定,不指定的話,預設最大是integer.max_value

concurrentlinkedqueue 非阻塞佇列

4. readwritelock解決了這個問題,當寫操作時,其他執行緒無法讀取或寫入資料,而當讀操作時,其它執行緒無法寫入資料,但卻可以讀取資料

5  semaphore(int permits, boolean fair)   fair執行緒是否公平獲取

訊號量(semaphore)可以允許多個執行緒訪問,每次

acquire()數量減1,每次

release() 數量加1,當數量為0的時候將不允許執行緒進入

6 countdownlatch類  :初始化數量,在未達到0之前一直在awai(),其他方法呼叫countdown();方法減1,當計數器達到0的時候

countdownlatch喚醒等待的執行緒,也可以設定當超過一定時間不再等待直接執行。例子開會的時候等人,沒到一人減1,當人到齊後會議開始。

只准進入一次。

7 cyclicbarrier 等待所有執行緒準備就緒,所有執行緒再一起執行

countdownlatch 某個執行緒等待其他執行緒完成,然後在執行

phaser     分多個階段同步執行緒,當某個執行緒沒有滿足條件完成該階段,其他執行緒不需要等待該執行緒,當所有完成該階段的執行緒都完成了,所有執行緒才會繼續下乙個階段。

當乙個執行緒到達exchange呼叫點時,如果它的夥伴執行緒此前已經呼叫了此方法,那麼它的夥伴會被排程喚醒並與之進行物件交換,然後各自返回。如果它的夥伴還沒到達交換點,那麼當前執行緒將會被掛起,直至夥伴執行緒到達——完成交換正常返回;或者當前執行緒被中斷——丟擲中斷異常;又或者是等候超時——丟擲超時異常

exchangerexchanger;

exchanger.exchange(data);

8. threadpoolexecutor      list>> r = null; r 接受callable返回的結果物件result

invokeany() 返回任務list中的第乙個返回結果

invokeall() 返回任務list中的所有返回結果

9.  

linkedblockingqueue   阻塞佇列

其中主要用到put和take方法,put方法在佇列滿的時候會阻塞直到有佇列成員被消費,take方法在佇列空的時候會阻塞,直到有佇列成員被放進來

先進先出等特性,是作為生產者消費者的首選

可以指定容量,也可以不指定,不指定的話,預設最大是integer.max_value

concurrentlinkedqueue 非阻塞佇列

Java7併發程式設計 3 執行緒同步輔助類

常用的同步有synchronized關鍵字 lock介面以及實現類,如reentrantlock reentrantreadwritelock中的readlock和writelock。在本章中將以以下幾個更高階的同步機制來實現多執行緒的同步。是一種計數器,用來保護乙個或則多個共享資源的訪問,它是併發...

Java7併發程式設計實戰(一) 執行緒的管理

1 繼承thread類,並且覆蓋run 方法 2 建立乙個實現runnable介面的類。使用帶引數的thread構造器來構造 2 example 計算列印乘法表 首先建立乙個calculator類,實現runnable介面 public class calculator implements run...

Java7併發程式設計實戰(一) 執行緒的等待

試想乙個情景,有兩個執行緒同時工作,還有主線程,乙個執行緒負責初始化網路,乙個執行緒負責初始化資源,然後需要兩個執行緒都執行完畢後,才能執行主線程 首先建立乙個初始化資源的執行緒 public class datasourcesloader implements runnable catch int...