多線程知識點

safepoint 安全點顧名思義是指一些特定的位置,當線程運行到這些位置時,線程的一些狀態能夠被肯定(the thread's representation of it's Java machine state is well described),好比記錄OopMap的狀態,從而肯定GC Root的信息,使JVM能夠安全的進行一些操做,好比開始GC。
 java

 

線程間通訊  安全

wait等待 , notify 喚醒進入阻塞隊列多線程

https://juejin.im/entry/5a2bb783f265da43163cff74框架

 

http://ifeve.com/java-special-troops-aqs/oop

 

公平鎖, 非公平鎖  ,非公平鎖效率高,公平鎖效率低。ui

lock.net

  • 調用tryAcquire方法嘗試獲取鎖,獲取成功的話修改state並直接返回true,獲取失敗的話把當前線程加到等待隊列中
  • 加到等待隊列以後先檢查前置節點狀態是不是signal,若是是的話直接阻塞當前線程等待喚醒,若是不是的話判斷是不是cancel狀態,是cancel狀態就往前遍歷並把cancel狀態的節點從隊列中刪除。若是狀態是0或者propagate的話將其修改爲signal
  • 阻塞被喚醒以後若是是隊首而且嘗試獲取鎖成功就返回true,不然就繼續執行前一步的代碼進入阻塞

release線程

1. 修改狀態位
2. 喚醒排隊的節點
3. 結合lock方法,被喚醒的節點會自動替換當前節點成爲head對象

http://ifeve.com/juc-aqs-reentrantlock/blog

 

 

多線程

線程的狀態

https://xiaogd.net/java-%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81%E4%B9%8B-waiting/ 線程狀態好文

 

lock

,同時也支持公平鎖與非公平鎖。所謂的公平與非公平指的是在請求前後順序上,先對鎖進行請求的就必定先獲取到鎖,那麼這就是公平鎖,反之,若是對於鎖的獲取並無時間上的前後順序,如後請求的線程可能先獲取到鎖,這就是非公平鎖,通常而言非,非公平鎖機制的效率每每會賽過公平鎖的機制,但在某些場景下,可能更注重時間前後順序,那麼公平鎖天然是很好的選擇。
--------------------- 
 

aqs

AQS工做原理概要
AbstractQueuedSynchronizer又稱爲隊列同步器(後面簡稱AQS),它是用來構建鎖或其餘同步組件的基礎框架,內部經過一個int類型的成員變量state來控制同步狀態,當state=0時,則說明沒有任何線程佔有共享資源的鎖,當state=1時,則說明有線程目前正在使用共享變量,其餘線程必須加入同步隊列進行等待,AQS內部經過內部類Node構成FIFO的同步隊列來完成線程獲取鎖的排隊工做,同時利用內部類ConditionObject構建等待隊列,當Condition調用wait()方法後,線程將會加入等待隊列中,而當Condition調用signal()方法後,線程將從等待隊列轉移動同步隊列中進行鎖競爭。注意這裏涉及到兩種隊列,一種的同步隊列,當線程請求鎖而等待的後將加入同步隊列等待,而另外一種則是等待隊列(可有多個),經過Condition調用await()方法釋放鎖後,將加入等待隊列
--------------------- 
 

 

lock與sync區別

 

 

synchronized與Lock的區別

 

https://blog.csdn.net/u012403290/article/details/64910926

 

AQS 詳細解析 特別好文

https://blog.csdn.net/Luxia_24/article/details/52403033  !!!

 

wait()與sleep()的區別

簡單來講wait()會釋放對象鎖而sleep()不會釋放對象鎖。這些問題有不少的資料,再也不贅述。

 

鎖升級降級

https://blog.csdn.net/aitangyong/article/details/38315885

 

lock原理

aqs 判斷是否獲取鎖, 獲取過鎖則stat++

https://blog.csdn.net/Luxia_24/article/details/52403033

相關文章
相關標籤/搜索