重入鎖

ReentrantLock:重入鎖胚吁,它是唯一一個實(shí)現(xiàn)了 Lock 接口的類攀细。

synchronized 和 ReentrantLock 都是可重入鎖

獨(dú)占鎖:ReentrantLock艰匙、ReentrantReadWriteLock.WriteLock
共享鎖:ReentrantReadWriteLock.ReadLock现喳、CountDownLatch鞋拟、CyclicBarrier盘寡、Semaphore
其實(shí)現(xiàn)方式為:
獨(dú)占鎖實(shí)現(xiàn)的是tryAcquire(int)尽狠、tryRelease(int)
共享鎖實(shí)現(xiàn)的是tryAcquireShared(int)衔憨、tryReleaseShared(int)

實(shí)現(xiàn)原理:

是通過為每個鎖關(guān)聯(lián)一個請求計(jì)數(shù)和一個占有它的線程。
當(dāng)計(jì)數(shù)為0時袄膏,認(rèn)為鎖是未被占有的践图。
線程請求一個未被占有的鎖時,jvm講記錄鎖的占有者沉馆,并且講請求計(jì)數(shù)器置為1 码党。
如果同一個線程再次請求這個鎖,計(jì)數(shù)將遞增斥黑;
每次占用線程退出同步塊揖盘,計(jì)數(shù)器值將遞減。
直到計(jì)數(shù)器為0,鎖被釋放锌奴。

重入鎖指的是線程在獲得鎖之后兽狭,再次獲取該鎖不需要阻塞,而是直接關(guān)聯(lián)一次計(jì)數(shù)器增加重入次數(shù)鹿蜀。

比如調(diào)用 demo1 方法獲得了當(dāng)前的對象鎖箕慧,然后在這個方法中再去調(diào)用demo2,
demo2 中的存在同一個實(shí)例鎖茴恰,這個時候當(dāng)前線程會因?yàn)闊o法獲得
demo2 的對象鎖而阻塞颠焦, 如果 不是 重入鎖 就會產(chǎn)生死鎖。

重入鎖的設(shè)計(jì)目的

重入鎖的設(shè)計(jì)目的是避免線程的死鎖往枣。

public class ReentrantDemo{
  public synchronized void demo1(){
    System.out.println("begin:demo1");
    demo2();
  }
  public void demo2(){
    System.out.println("begin:demo1");
    synchronized (this){
    }
  }
  public static void main(String[] args) {
    ReentrantDemo rd=new ReentrantDemo();
    new Thread(rd.demo1()).start();
        }
}
public class AtomicDemo {
  private static int count=0;
  static Lock lock=new ReentrantLock();
  public static void inc(){
       //重入鎖
    lock.lock();
    try {
      Thread.sleep(2);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    count++;
    lock.unlock();
  }
  public static void main(String[] args) throws InterruptedException {
     for(int i=0;i<200;i++){
      new Thread(()->{AtomicDemo.inc();}).start();
     }
    Thread.sleep(4000);System.out.println("result:"+count);
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伐庭,一起剝皮案震驚了整個濱河市粉渠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌圾另,老刑警劉巖霸株,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異集乔,居然都是意外死亡淳衙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門饺著,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肠牲,你說我怎么就攤上這事幼衰。” “怎么了缀雳?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵渡嚣,是天一觀的道長。 經(jīng)常有香客問我肥印,道長识椰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任深碱,我火速辦了婚禮腹鹉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敷硅。我一直安慰自己功咒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布绞蹦。 她就那樣靜靜地躺著力奋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪幽七。 梳的紋絲不亂的頭發(fā)上景殷,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機(jī)與錄音澡屡,去河邊找鬼猿挚。 笑死,一個胖子當(dāng)著我的面吹牛挪蹭,可吹牛的內(nèi)容都是我干的亭饵。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼梁厉,長吁一口氣:“原來是場噩夢啊……” “哼辜羊!你這毒婦竟也來了踏兜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤八秃,失蹤者是張志新(化名)和其女友劉穎碱妆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昔驱,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疹尾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了骤肛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纳本。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腋颠,靈堂內(nèi)的尸體忽然破棺而出繁成,到底是詐尸還是另有隱情,我是刑警寧澤淑玫,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布巾腕,位于F島的核電站,受9級特大地震影響絮蒿,放射性物質(zhì)發(fā)生泄漏尊搬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一土涝、第九天 我趴在偏房一處隱蔽的房頂上張望佛寿。 院中可真熱鬧,春花似錦但壮、人聲如沸狗准。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腔长。三九已至,卻和暖如春验残,著一層夾襖步出監(jiān)牢的瞬間捞附,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工您没, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鸟召,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓氨鹏,卻偏偏與公主長得像欧募,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子仆抵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361