java併發學習 讀書筆記二

2021-08-26 04:43:53 字數 1401 閱讀 7847

executor框架介紹

1、executor框架提供了乙個靈活的執行緒池實現,防止應用程式過載而耗盡記憶體。它是基於生產者-消費者模式的,提交任務的執行緒是生產者,執行任務的執行緒是消費者。

2、執行緒池

newfixedthreadpool建立乙個定長的執行緒池,每當提交乙個任務就建立乙個執行緒,直到達到池的最大長度,這是執行緒池會保持長度不再變化(如果乙個執行緒由於非預期的exception而結束,執行緒池會補充乙個新的執行緒)。

newcachedthreadpool建立乙個可快取的執行緒池,如果當前執行緒池的長度超過了處理的需要時,它可以靈活地**空閒的執行緒。當需求增加時,它可以靈活的新增新的執行緒,而並不會對池的長度作任何限制。

newsinglethreadexecutor建立乙個單執行緒化的executor,它只建立唯一的工作者執行緒來執行任務,如果這個執行緒異常結束,會有另乙個取代它。executor會保證任務依照任務佇列所規定的順序(fifo,lifo,優先順序)執行。

newscheduledthreadpool建立乙個定長的執行緒池,而且支援定時的以及週期性的任務執行。

3、完成服務completionservice

completionservice整合了executor和blockingqueue的功能,你可以將callable任務提交給它去執行,然後使用類似佇列中take和poll方法,在任務結果完整可用時獲得這個結果。

4、swingutilities.invokeandwait,它可以安排乙個runnable任務在事件派發執行緒中執行,並會阻塞當前執行緒直到它完成(只能從非gui執行緒中呼叫,否則會發生死鎖)

swingutilities.invokeandlater,它可以安排乙個runnable任務在事件派發執行緒中執行(可從任意執行緒中呼叫)

5、future是被設計來處理可取消任務,所以遇到任務處理有取消需求時,可以考慮用future

6、發生死鎖的原因:兩個或者多個執行緒企圖以不同的順序獲得相同的多個鎖時會發生

例子:

public class leftrightdeadlock}}

public void rightleft()}}

}

7、amdahl定律

amdahl定律描述了在乙個系統中,基於可並行化和序列化元件各自所佔的比重,程式通過獲得額外的計算資源,理論上能夠加速多少。如果f是必須序列化執行的比重,n代表處理器數,提速公式為:

speedup <= 1/ (f + (1 - f)/n)

8、建立lock/reentrantlock機制的意義

內部鎖在大部分情況下都能很好的工作,但是有一些功能上的侷限--不能中斷那些等待獲取鎖的執行緒,並且在請求鎖失敗的情況下只能無限等待。內部鎖必須在獲取它的**中釋放;這很好的簡化了**,與異常處理機制能夠良好的互動。但在某些情況下,乙個更靈活的加鎖機制提供了更好的活躍度和效能。

Java 讀書筆記 21 4 併發

相關參考 2.2 在任務阻塞時終結 sleep 方法將執行緒由執行狀態變為阻塞狀態 執行緒狀態 新建 new 當執行緒被建立時,執行緒會短暫地處於這種狀態。此時,執行緒已經被分配了必需的系統資源,並執行了初始化。此時執行緒已經有資格獲得cpu的時間,此時只是有能力去爭取cpu的時間。之後 排程器將把...

Java併發 JAVA併發程式設計實戰 讀書筆記3

發布乙個物件的意思是使它能夠被當前範圍之外的 所使用。比如將乙個引用儲存到其他 可以訪問的地方,在乙個非私有的方法中返回這個引用。在很多情況下,我們需要確保物件及它們的內部狀態不被暴露。乙個物件在尚未準備好時就將它發布,稱作逸出。最常見的發布物件的方式就是將物件的引用儲存到公共靜態域中,任何類和執行...

Java併發 JAVA併發程式設計實戰 讀書筆記8

為計算結果建立高效 可伸縮的快取記憶體 public inte ce computable public class expensivefunction implements computable public class memoizer1implements computable public ...