首頁  >  文章  >  Java  >  java中的鎖是什麼

java中的鎖是什麼

尚
原創
2019-11-21 10:47:546222瀏覽

java中的鎖是什麼

鎖定是用來控制多個執行緒存取共享資源的方式,一般來說,一個鎖定能夠防止多個執行緒同時存取共享資源。

Java中的鎖定主要有以下幾個概念:

1、同步鎖定  

#同一時刻,一個同步鎖定只能被一個執行緒存取。以物件為依據,透過synchronized關鍵字來進行同步,實現對競爭資源的互斥存取。

2、獨佔鎖(可重入的互斥鎖) 

互斥,即在同一時間點,只能被一個執行緒持有;可重入,即可以被單一線程多次獲取。什麼意思呢?根據鎖的取得機制,它分為「公平鎖」和「非公平鎖」。 Java中透過ReentrantLock實現獨佔鎖,預設為非公平鎖。

3、公平鎖 

是依照透過CLH等待執行緒依照先來先得的規則,執行緒依序排隊,公平的取得鎖,是獨佔鎖的一種。 Java中,ReetrantLock中有一個Sync型別的成員變數sync,它的實例為FairSync型別的時候,ReetrantLock為公平鎖。設定sync為FairSync類型,只需—Lock lock = new ReetrantLock(true)。

4、非公平鎖 

是當執行緒要取得鎖定時,它會無視CLH等待佇列而直接取得鎖定。 ReetrantLock預設為非公平鎖,或-Lock lock = new ReetrantLock(false)。

5、共享鎖定    

能被多個執行緒同時取得、共享的鎖定。即多個執行緒都可以取得該鎖,對該鎖物件進行處理。典型的就是讀鎖——ReentrantReadWriteLock.ReadLock。即多個線程都可以讀它,而且不影響其他線程對它的讀,但是大家都不能修改它。 CyclicBarrier, CountDownLatch和Semaphore也都是共享鎖。

6、讀寫鎖

維護了一對相關的鎖,“讀取鎖”用於只讀操作,它是“共享鎖”,能同時被多個線程獲取。 “寫入鎖”用於寫入操作,它是“獨佔鎖”,只能由一個執行緒鎖取得。在

Java中,讀寫鎖為ReadWriteLock 介面定義,其實作類別為ReentrantReadWriteLock,包含內部類別ReadLock和WriteLock。方法readLock()、writeLock()分別回傳度操作的鎖和寫入操作的鎖。

更多java知識請關注java基礎教學

以上是java中的鎖是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn