jdk 鎖 簡介

  • java中有哪些鎖?
  • 樂觀鎖/悲觀鎖。
  • 樂觀鎖:在java併發包下atomic 下的實現類都是基於cas的樂觀鎖。CAS: 比較並交換,比較當前值和最新的值是否相等,相等則賦值。比如AtomicInteger: 在進行加1操作時,先比較當前對象上value的最新值和與原來的值是否相等,相當說明在取value值和要給value賦值過程沒有變化,是一個原子操作。有變化則一直循環等待。value是使用volitile修飾的。Volatile 標識可見性,通過內存屏障實現,防止指令重排。即多線程環境下任何一個線程的修改變量的值,該變化會立即更新到主存。其他線程會感知到這個變化。即內存一致性協議或者總線鎖模式。
  • 悲觀鎖:即java中提供的各種鎖。
  • 可重入鎖:即一個線程獲取到鎖之後,再次獲取同一把鎖的時候可以直接跳過獲取鎖的步驟。
  • 公平鎖:是指多個線程獲取鎖的時候,按照排隊的順序獲取鎖。先到先得原則。
  • 非公平鎖: 多個線程獲取鎖的時候,每個線程在獲取鎖的時候不檢查是否有其他等待更久的線程,直接嘗試獲取鎖,這會導致
  • 如果上一個線程剛釋放鎖,喚醒下一個等待的線程去獲得鎖的過程,可能這時新來的線程優先獲得了鎖。
  • synchronized 就是非公平鎖。
  • 獨佔鎖: 獨佔即一個線程獲得鎖後,其他線程在線程沒有釋放鎖的期間都無法獲得鎖。
  • 共享鎖: 常見的讀鎖就是共享鎖,即獲取讀鎖的線程持有讀鎖後,其他線程獲取讀鎖也可以獲取鎖。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章