JUC 多線程

java 併發編程

 

cas

自旋 cas+死循環

yield+自旋

sleep +自旋

park+自旋

 

對象在內存中的佈局

 

公平鎖和非公平鎖

ReentrantLock 源碼

 

AQS

syschronized 關鍵字 底層原理

從各個層面分析:

1.java代碼: synchronized

2.字節碼的層面: monitorenter,moniterexit

3.jvm 執行過程中會自動升級 無鎖--》偏向鎖---》輕量級鎖---》重量級鎖

4.lock comxchg

 

 

1.什麼是線程不安全

在多線程編程中,同時訪問同一個共享可變的資源,由於線程的順序不可控,所以容易產生線程安全問題。

2.如何解決線程安全問題

加鎖,lock,synchronized

3.所有的併發模式,在解決線程線程安全問題時,採用的方案都是序列化訪問臨界資源。

 

ABA的問題 解決方案: 添加版本號

 

 

線程池的意義:

1.爲什麼使用線程池

線程是稀缺資源,它的創建和銷燬是一個相對偏重和消耗資源的操作,而java線程依賴於內核線程,創建線程需要操作系統狀態切換,爲避免過度消耗資源,需要設法重用線程,線程池是一個線程緩存,負責對線程的分配,調度,調優,和監控。

2.線程池的優勢:

1.重用線程,減少線程的創建和銷亡,提高性能,提高響應速度。

3.什麼時候使用線程池:

1.單個任務處理時間比較短

2.任務數量比較多

4.阻塞隊列

在任意時刻,不管併發有多高,永遠只有一個線程進行入隊或出隊操作,線程安全的隊列

阻塞隊列又分爲有界隊列和無界隊列。

比如有界隊列的長度是5 ,隊列滿時,只能進行出隊操作,所有的入隊操作必須等待,也就是阻塞

隊列的長度爲0 時,隊列爲空,只能進行入隊操作,所有的出隊操作必須等待,也就是阻塞

 

5.線程池的實現原理

 

線程池涉及的幾個概念:核心線程的大小。線程池的大小,阻塞隊列的大小,拒絕策略

流程: 提交任務,如果核心線程未滿,創建線程執行任務,如果核心線程已滿,判斷阻塞隊列是否已滿,如果阻塞隊列未滿,把任務加入阻塞隊列,如果阻塞隊列已經滿了,判斷線程池是否已滿,如果線程池未滿,創建線程執行任務。如果線程池已滿,執行拒絕策略。

 

 

ThreadPoolExecutor 構造方法的參數

int corePoolSize, 核心線程的大小

int maximumPoolSize, 線程池的大小

long keepAliveTime, 當前線程數>核心線程數,當一個線程的空閒時間達到keepalivetime,,則線程會終止。

TimeUnit unit,

BlockingQueue<Runnable> workQueue, 阻塞隊列

ThreadFactory threadFactory, 線程工廠

RejectedExecutionHandler handler 拒絕策略

 

鎖的狀態

無鎖態--->偏向鎖--->輕量級鎖(自旋鎖,自適應鎖)----->重量級鎖

重量級鎖 指向互斥量的指針

輕量級鎖 指向線程棧中的Lock Record 指針

偏向鎖 當前線程指針id

 

線程池 線程數的選取:

cpu密集型: 線程數=cpu的核數+1

IO密集型: 線程數=cpu的核數*(1+平均等待時間/平均工作時間)

參考:

1.https://www.jianshu.com/p/eac466494477-----------cas 原理

2.https://www.jianshu.com/p/da9d051dcc3d----aqs

3.https://blog.csdn.net/u012102536/article/details/103070769--- aqs源碼分析

4.https://www.cnblogs.com/jxxblogs/p/11751944.html-------線程池的狀態

5.https://www.jianshu.com/p/389b58856894----- java 線程池源碼分析

6.https://www.jianshu.com/p/117571856b28---- java 線程池的實現源碼分析

7.https://www.jianshu.com/p/063ebba64ec4---- java 線程池原理與Executor框架

8.https://www.jianshu.com/p/36eedeb3f912-----偏向鎖,輕量級鎖,重量級鎖詳解

9.https://www.bilibili.com/video/BV1s741127Gn?from=search&seid=14128259413075469454 ------ 偏向鎖,輕量級鎖,重量級鎖視頻

10.https://blog.csdn.net/lengxiao1993/article/details/81568130---- 偏向鎖,輕量級鎖,重量級鎖的詳解

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