知識點彙總java
1.1 競爭條件與臨界區mysql
1.2 死鎖檢測與防止面試
1.3 產生條件
互斥
請求並持有
非剝奪
循環等待sql
NEW:建立多線程
RUNNABLE:可運行併發
REDAY:就緒態異步
RUNNING:運行態工具
BLOCKED:獲取鎖失敗進入BLOCKED狀態,獲取鎖時進入REDAY態優化
TIME_WAITING:超時等待ui
WAITING:無超時等待
TERMINATED:結束
掌握5種狀態便可(新建、就緒、運行、阻塞、死亡)
一、CAS
二、synchronize
三、lock
CAS是樂觀鎖,輕量級鎖,經過比較值是否被更改來判斷。
缺點:可能會出現的ABA(上圖右)的問題,不必定會影響結果,解決辦法是提供額外的標誌位或者時間戳(相似於mysql version字段)。
方法同步:經過java的高級字節碼指令ACC_SYNCCHRONIZED標誌來實現。
代碼塊同步:經過java的兩個高級字節碼指令monitorenter和monitorexit來實現。
鎖優化機制:
一、偏向鎖:先使用偏向鎖
二、輕量鎖:獲取偏向鎖失敗則升級爲CAS輕量鎖
三、自旋鎖:獲取輕量鎖失敗,則進行短暫的自旋
四、重量級鎖:以上都失敗則升級爲重量級鎖
lock鎖代碼塊,相似與cas
一、固定大小線程池:線程池固定,使用的是無界緩衝隊列,適用於任務數量不均勻的場景,也適用於對內存壓力不敏感,對系統負載比較敏感的場景。
二、Cached線程池:不限制建立的線程數,適用於要求低延遲的短時間任務的場景。
三、單線程線程池:一個線程的固定線程池,適用於須要異步執行,但要保證線程執行順序的場景。
四、Scheduled線程池:適用於按期執行任務的場景,支持按固定的頻率或者固定延時來執行的場景。
五、工做竊取線程池:適用於任務時長不均勻的場景。
參數介紹:
corePoolSize:核心線程數,核心線程會一直存活。
maximumPoolSize:最大線程數,決定線程池最多能夠建立多少線程。
keepAliveTime:空閒時間,當線程閒置超過空閒時間時就會被銷燬。
uint:空閒時間的單位。
workQueue:緩衝隊列
ArrayBlockingQueue:有界隊列,有最大容量閒置。
LinkedBlockingQueue:無界隊列,不限制容量。
SynchronousQueue:同步隊列,內部沒有緩衝區。
threadFactory:設置線程池工廠方法,用來建立新的線程方法,能夠對線程的屬性進行定製,例如線程的group,線程名等,通常使用默認的工廠類便可。
handler:線程池滿時的拒絕策略,
Abort:線程池滿後,提交新任務時,會拋出異常,默認拒絕策略。
Discard:線程池滿後,提交新任務時,對任務進行丟棄。
CallerRuns:線程池滿後,提交新任務時,會直接執行提交的任務。
DiscardOldest:線程池滿後,提交新任務時,會丟棄最先提交的任務。
各種線程池調用參數方法:
固定大小線程池:
corePoolSize和maximumPoolSize:設置成指定的線程數
workQueue:LinkedBlockingQueue
Cached線程池:
corePoolSize:0
maximumPoolSize:Integer.MAX_VALUE
keepAliveTime:60
workQueue:SynchronousQueue
單線程線程池:
corePoolSize和maximumPoolSize:1
Scheduled線程池:
workQueue:DelayWorkQueue,按延遲時間獲取任務的優先級隊列
調用方法:
一、execute
二、submit:能夠返回一個future對象,根據future對象能夠了解任務的執行狀況,能夠取消任務的執行,還能夠獲取任務的執行結果或者執行異常。
用於處理多線程常見問題的庫
表格第一行:基本數據類型的原子類。
表格第二行:對對象提供的原子類。
表格第一行:鎖相關的類。
表格第二行:異步執行相關的類。
表格第一行:經常使用的阻塞隊列。
表格第二行:控制多線程協做使用的類。
表格第三行:經常使用的併發集合。
面試考察點與真題
wait:Object方法,會釋放對象鎖,須要在同步塊中使用,不須要捕獲異常。
sleep:Thread方法,不會釋放對象鎖,任何地方使用,須要捕獲異常。
六、適用於讀併發多,寫併發少的場景,也可以使用CopyOnWrite解決。
七、wait、notify機制,共享變量的sync和lock同步機制
八、cas、sync、lock、ThreadLocal等機制
九、減小臨界區範圍、使用ThreadLocal、減小線程切換、使用讀寫鎖或CopyOnWrite等機制
十、ThreadLocal不是解決線程數據共享的問題,是解決數據隔離的問題。