1. 程式人生 > >可重入鎖,可中斷鎖,公平鎖的理解

可重入鎖,可中斷鎖,公平鎖的理解

執行緒鎖:
1.可重入鎖(表明了鎖的分配機制):
Synchronized和ReentrantLock都是可重入鎖

比如當一個執行緒執行到Synchronized方法method1,而method1方法中呼叫了另一個Synchrogazed方法method2

此時執行緒不需要重新申請一把鎖,可以直接執行method2

class MyClass {
    public synchronized void method1() {
        method2();
    }

    public synchronized void method2() {

    }
}


如果不具備可重入性,method2沒有Synchronized,那麼A執行緒會去申請一把鎖,而A擁有該物件鎖,就會導致執行緒A一直在申請獲取不到的鎖


2.可中斷鎖:
Synchronized是不可中斷鎖,LOCK為可中斷鎖

如果執行緒A正在執行鎖中的程式碼,執行緒B在等待獲取該物件鎖,如果等待時間過長,想讓B去做其他事情,可以讓他自己中斷或者在別的執行緒中斷它


3.公平鎖:
Synchronized是非公平鎖,ReentrantLock和ReentrantReadWriteLock預設是非公平鎖,可以開啟公平鎖

根據執行緒的等待時間來分配鎖,比如執行緒C的等待時間最長,C就獲得該鎖

public ReentrantLock() {
    sync = new NonfairSync();
    }

public ReentrantLock(boolean fair) {
    sync = (fair)? new FairSync() : new NonfairSync();
    }


通過有參構造傳入布林值是否開啟公平鎖,預設不開啟公平鎖

ReentrantLock方法:
isFair() //判斷鎖是否是公平鎖 
isLocked() //判斷鎖是否被任何執行緒獲取了 
isHeldByCurrentThread() //判斷鎖是否被當前執行緒獲取了 
hasQueuedThreads() //判斷是否有執行緒在等待該鎖

相關推薦

-概念:中斷公平、讀寫

++ 重復 lse -- som HR read cep sync 可重入鎖 指的是在同一個thread中,獲取鎖之後再次使用同樣的方法或對象中的其他方法可以直接操作,而不需要重新獲取鎖。它是基於thread粒度的,per-thread。 不可重入鎖 指的是每次使用鎖方法時

Lock、synchronized=====中斷公平、讀寫====CountDownLatch、CyclicBarrier 、join()、執行緒池

Lock、synchronized Synchronized 如果一個程式碼塊被synchronized修飾了,當一個執行緒獲取了對應的鎖,並執行該程式碼塊時,其他執行緒便只能一直等待,等待獲取鎖的執行緒釋放鎖,而這裡獲取鎖的執行緒釋放鎖只會有兩種情況:   1)獲取鎖的執行緒

JAVA機制-,中斷公平,讀寫,自旋

部落格引用處(以下內容在原有部落格基礎上進行補充或更改,謝謝這些大牛的部落格指導): JAVA鎖機制-可重入鎖,可中斷鎖,公平鎖,讀寫鎖,自旋鎖 在併發程式設計中,經常遇到多個執行緒訪問同一個 共享資源 ,這時候作為開發者必須考慮如何維護資料一致性,在java中synchronized

,中斷,公平理解

執行緒鎖: 1.可重入鎖(表明了鎖的分配機制):Synchronized和ReentrantLock都是可重入鎖 比如當一個執行緒執行到Synchronized方法method1,而method1方法中呼叫了另一個Synchrogazed方法method2 此時執行緒不需要

中斷 公平 讀寫

轉自:http://www.cnblogs.com/wihainan/p/4762800.html 侵刪 1.可重入鎖 如果鎖具備可重入性,則稱作為可重入鎖。 像synchronized和ReentrantLock都是可重入鎖,可重入性在我看來實際上表明瞭鎖的分配機

圖解 --樂觀 悲觀 獨佔 共享 公平公平

1.樂觀鎖--樂觀鎖是一種思想,它只解決對共享資源更新時的一致性問題,不解決讀取共享資源過程中,其他執行緒修改了共享資源導致讀取的是舊的資源的問題 一般正規化為: private Node enq(final Node node) { for (;;) { N

Java 中15種的介紹:公平,獨享,互斥,樂觀,分段,自旋等等

Java 中15種鎖的介紹 在讀很多併發文章中,會提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內容如下: 公平鎖 / 非公平鎖 可重入鎖 / 不可重入鎖 獨享鎖 / 共享鎖 互斥鎖 / 讀寫鎖 樂觀鎖 / 悲觀鎖 分段鎖

Java 種15種的介紹:公平,獨享,互斥等等...

Java 中15種鎖的介紹 在讀很多併發文章中,會提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內容如下: 公平鎖 / 非公平鎖 可重入鎖 / 不可重入鎖 獨享鎖 / 共享鎖 互斥鎖 / 讀寫鎖 樂觀鎖 / 悲觀鎖 分段鎖 偏向

Java 種15種的介紹:公平,獨享,互斥等等

Java 中15種鎖的介紹 在讀很多併發文章中,會提及各種各樣鎖如公平鎖,樂觀鎖等等,這篇文章介紹各種鎖的分類。介紹的內容如下

的獲取和釋放須要註意的一點兒事

style 能夠 public 獲取 post 不能 lock stat exec 什麽是可重入鎖,不可重入鎖呢?"重入"字面意思已經非常明顯了,就是能夠又一次進入。可重入鎖,就是說一個線程在 獲取某個鎖後,還能夠繼續獲取該鎖,即同意一個線程多次獲取同一個鎖。比方syn

pan ron 環境 href nts ble tid body implement 可重入鎖,也叫做遞歸鎖,指的是同一線程 外層函數獲得鎖之後 ,內層遞歸函數仍然有獲取該鎖的代碼,但不受影響。在JAVA環境下 ReentrantLock 和synchronized 都是

ReenTrantLock(和synchronized的區別)總結

循環 比較 關於 兩種方法 sdn 一個 隨機 targe condition ReenTrantLock可重入鎖(和synchronized的區別)總結 可重入性: 從名字上理解,ReenTrantLock的字面意思就是再進入的鎖,其實synchronized關鍵字所使用

手動實現一個

必須 util 第一個 ret timeunit pac roo exc wait package com.roocon.thread.ta1; public class Sequence { private MyLock lock = new MyLock(

Java併發程式設計(1):內建

每個Java物件都可以用做一個實現同步的鎖,這些鎖被稱為內建鎖或監視器鎖。執行緒在進入同步程式碼塊之前會自動獲取鎖,並且在退出同步程式碼塊時會自動釋放鎖。獲得內建鎖的唯一途徑就是進入由這個鎖保護的同步程式碼塊或方法。 當某個執行緒請求一個由其他執行緒持有的鎖時,發出請求的執行緒就會阻塞。然而,由於內建鎖是可

Java並發編程(1):內置

自己 如果 監視器 退出 進一步 自動 其他 實例 () 每個Java對象都可以用做一個實現同步的鎖,這些鎖被稱為內置鎖或監視器鎖。線程在進入同步代碼塊之前會自動獲取鎖,並且在退出同步代碼塊時會自動釋放鎖。獲得內置鎖的唯一途徑就是進入由這個鎖保護的同步代碼塊或方法。 當某個

Java併發程式設計:自己動手寫一把

關於執行緒安全的例子,我前面的文章Java併發程式設計:執行緒安全和ThreadLocal裡面提到了,簡而言之就是多個執行緒在同時訪問和修改公共資源的時候,由於不同執行緒搶佔CPU問題而導致的結果不確定性,就是在併發程式設計中經常要考慮的執行緒安全問題。前面的做法是使用同步語句synch

分散式(一)__基於Zookeeper實現分散式

1  重入的實現 對於鎖的重入,我們來想這樣一個場景。當一個遞迴方法被sychronized關鍵字修飾時,在呼叫方法時顯然沒有發生問題,執行執行緒獲取了鎖之後仍能連續多次地獲得該鎖,也就是說sychronized關鍵字支援鎖的重入。對於ReentrantLock,雖然沒有像sych

ReentrantLock(不看後悔,看了必懂)

ReentraantLock是通過一個FIFO的等待佇列來管理獲取該鎖所有執行緒的。在“公平鎖”的機制下,執行緒依次排隊獲取鎖(先等待的執行緒先獲得鎖);而“非公平鎖”在鎖是可獲取狀態時,不管自己是不是在佇列的開頭都會獲取鎖。  ReentrantLock和synchroni

Java併發程式設計:用AQS寫一把

前一篇部落格Java併發程式設計:自己動手寫一把可重入鎖詳述瞭如何用synchronized同步的方式來實現一把可重入鎖,今天我們來效仿ReentrantLock類用AQS來改寫一下這把鎖。要想使用AQS為我們服務,首先得弄懂三個問題:AQS是什麼?AQS已經做了什麼以及我們還需要做些什

java(ReentrantLock)的實現原理

聲明 其他人 不用 vol 喚醒 ola 是不是 結束 真的 前言相信學過java的人都知道 synchronized 這個關鍵詞,也知道它用於控制多線程對並發資源的安全訪問,興許,你還用過Lock相關的功能,但你可能從來沒有想過java中的鎖底層的機制是怎麽實現的。如果真