1、synchronized鎖是可以幫助我們自動開鎖和關閉鎖
2、lock鎖,我們最常用的是reentrantlock重入鎖,需要我們手動的開鎖和手動關鎖
3、synchronized只能與wait()、notify()方法一起使用
4、reentrantlock只能與condition類中的await()、single()方法一起使用
一、產品
二、生產者
/**
* 生產者
*/class
product
extends
thread
@override
public
void
run(
)catch
(interruptedexception e)}if
(count ==1)
else
count =
(count +1)
%2; user.flag =
true
;//喚醒另乙個執行緒
user.
getcondition()
.signal()
;}catch
(exception e)
finally}}
}
三、消費者
/**
* 消費者
*/class
consumer
extends
thread
@override
public
void
run(
)catch
(interruptedexception e)
} system.out.
println
(user)
; user.flag =
false
;//喚醒生產者執行緒
user.
getcondition()
.signal()
;}catch
(exception e)
finally}}
}
四、執行結果
java中的lock和synchronized區別
1 reentrantlock 擁有synchronized相同的併發性和記憶體語義,此外還多了 鎖投票,定時鎖等候和中斷鎖等候 執行緒a和b都要獲取物件o的鎖定,假設a獲取了物件o鎖,b將等待a釋放對o的鎖定,如果使用 synchronized 如果a不釋放,b將一直等下去,不能被中斷 如果 使用...
鎖的分類以及相關講解與synchronized區別
1.鎖的分類 2.深入理解lock介面 lock的使用 lock與synchronized的區別 lock 獲取鎖與釋放鎖的過程,都需要程式設計師手動的控制 lock用的是樂觀鎖方式。所謂樂觀鎖就是,每次不加鎖而是假設沒有衝突而去完成某項操作,如果因為衝突失敗就重試,直到成功為止。樂觀鎖實現的機制就...
lock執行緒鎖
lock 實現提供了比使用 synchronized 方法和語句可獲得的更廣泛的鎖定操作。lock鎖可以顯示的獲取鎖物件和釋放鎖,而synchorized則是隱式的。不使用塊結構鎖就失去了使用 synchronized 方法和語句時會出現的鎖自動釋放功能。lock 介面的實現允許鎖在不同的作用範圍內...