java多執行緒程式設計核心技術知識點總結

2021-07-22 09:19:26 字數 1460 閱讀 1348

thread為類,只能單繼承,runnable為介面,可以多繼承。runnable作為引數傳遞給thread可以實現資源共享。

方法內的變數為執行緒安全,例項變數為非執行緒安全。

interrupt: 會清除狀態

isinterrupt:不會清除狀態

當乙個執行緒獲得物件鎖時,再次重入還是可以獲得該物件鎖。

如果是對static方法加鎖相當於對類加鎖

非static是對物件加鎖

jstack 可以檢查死鎖

volatile主要是使變數在多個執行緒間可見。主要用於多執行緒可以感知例項變數被修改

volatile只能用於修飾變數,syntronized還可以修飾方法和類

多執行緒訪問volatile不會阻塞 訪問syntronized會發生阻塞

volatile保證資料的原子性,並不保證可見性 syntronized保證原子性和可見性

wait,notify(notifyall)方式

在呼叫wait之前,必須獲得該物件物件級別的鎖。只能在同步方法,同步塊中呼叫wait

呼叫wait()後,釋放鎖

wait()沒有持有適當的鎖 則會報錯illegalmonitorstateexception

在執行notify之後執行緒不會馬上釋放鎖,只有等到退出syntronized方法後才會釋放鎖

wait使得執行緒釋放物件鎖,進入等待,直到被喚醒

notify隨機挑選程序喚醒

notifyall喚醒所有執行緒,獲得鎖的執行緒執行

每個鎖物件都有兩個佇列,就緒佇列存放將要獲得鎖的執行緒,阻塞佇列儲存了被阻塞的執行緒。執行緒被喚醒進入就緒佇列,wait()進入阻塞佇列。

當interrupt方法遇到了wait方法會出現interruptexception

乙個生產者 多個消費者 使用while notifyall();

pipedinputstream pipedoutputstream pipedreader pipedwriter

方法join的作用是使得所屬物件的執行緒的run方法執行結束後再執行當前的執行緒

每個執行緒都繫結自己的值

公平鎖按照執行緒加鎖的順序來獲得鎖fifo

非公平鎖搶先占有獲取鎖

getqueuelength獲取等待鎖的執行緒個數

getwaitqueuelength(condition)獲取等待某個條件的執行緒的鎖的個數

讀相關的鎖 共享鎖

寫相關的鎖 排它鎖

lock.readlock().lock()

timetask schedule

schedule(timetask,time,long)週期性的執行某任務

timetask.cancel()取消任務

timer.cancel將任務佇列的所有任務清除

餓漢模式 例項已經被建立

懶漢模式需要時建立 多執行緒雙層保護

enum列舉實現單例模式

反序列化使用readresolve方法

《java多執行緒程式設計核心技術》核心筆記 一

執行緒具有優先順序 執行緒的優先順序具有繼承特性。被呼叫者繼承呼叫者的優先順序 優先順序高的執行緒 絕大部分會現執行 方法內的變數是執行緒安全的。多個執行緒訪問同乙個物件的同步方法時,一定是執行緒安全的。synchronized取得的是物件鎖 多個執行緒訪問乙個物件 synchronized 如果乙...

Java多執行緒 程式設計核心技術4Lock

執行緒間同步互斥,且嗅探鎖定 多路分支通知,使用上較synchronized靈活 呼叫該物件的lock 獲取鎖,unlock 釋放鎖 借助condition實現等待 通知模式 condition 物件監視器 是jdk5 靈活性 多路通知 乙個lock物件中建多個condition例項,執行緒物件可以...

Java多執行緒 程式設計核心技術5 Lock

1 計畫時間早於當前時間,提前執行 2 timertask類的cancel 方法 將自身從任務佇列中清除 3 timer類的cancel方法 清空任務佇列的全部任務 如果該方法沒有搶到鎖,任務還是繼續執行 4 schedule timertask task long delay,long perio...