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...