sychronize和lock
一、 synchronized的三種應用方式
1.修飾例項方法,作用於當前例項加鎖,進入同步**前要獲得當前例項的鎖。(鎖的是當前物件)
2.修飾靜態方法,作用於當前類物件加鎖,進入同步**前要獲得當前類物件的鎖。(鎖的是當前class物件)
3.修飾**塊,指定加鎖物件,對給定物件加鎖,進入同步**庫前要獲得給定物件。(鎖的是{}中的物件)
二、synchronized的位元組碼指令
synchronized同步塊使用了monitor.enter和monitor.exit指令實現同步,這兩個指令,本質上都是對乙個物件的監視器(monitor)進行獲取,這個過程是排他的,也就是說同一時刻只能有乙個執行緒獲取到由synchronized所保護物件的監視器。
執行緒執行到monitor.enter指令時,會嘗試獲取物件所對應的monitor所有權,也就是嘗試獲取物件的鎖,而執行monitor.exit,就是釋放monitor的所有權。
三、synchronized的鎖的原理
兩個重要的概念:乙個是物件頭,另乙個是monitor。
Lock介面和ReentrantLock類
lock l l.lock try finallylock 獲取鎖 unlock 釋放鎖 newcondition 返回乙個繫結到這個鎖物件例項的乙個condition例項 trylock 僅當鎖未被其他執行緒占有時才能獲取到並返回true,否則返回false lockinterruptibly 獲...
latch和lock的區別
latch是oracle提供的輕量級鎖資源,用於快速,短時間的鎖定資源,防止多個併發程序同時修改訪問某個共享資源,他只工作在記憶體中,我們可以不大準確的說,記憶體中資源的鎖叫latch,資料庫物件 表,索引等 的鎖叫lock。本文向各位闡述oracle的latch機制,latch,用金山詞霸翻譯是門...
synchronized和Lock的區別
lock提供了和synchronized類似的同步功能,只是在使用時需要顯示地獲取和釋放鎖,雖然lock缺少了synchronized隱士獲取釋放鎖的便捷性,但是卻擁有了鎖獲取與釋放的可操作性,可中斷的獲取鎖以及超時獲取鎖等多種synchronized所不具備的特性。雖然synchronized能夠...