[英]can synchronized at method level be replaced by Lock?
在編寫線程安全類時,我們在代碼的兩個位置使用了synchronized
關鍵字,
1.方法級同步
2.同步塊
就我所能想到的,像Lock
( java.util.concurrent.locks.Lock
)這樣的接口只能在塊級而不是方法級用於synchronized
。 還是有辦法嗎?
我不具備任何真正的需要,但杳無音訊的討論,只是古董Lock
可換貨的synchronized
。
public class SampleClass {
public synchronized void method(){
.....
}
}
“ synchronized
方法”沒有特殊的語法“在方法的開頭獲取Lock,然后在最后釋放它”。
當然,您可以自己做:
public void method() {
lock.lock();
try {
// rest of the method
} finally {
lock.unlock();
}
}
眾所周知
public class SampleClass {
public synchronized void method(){
.....
}
}
和
public class SampleClass {
public void method(){
synchronized(this) {
.....
}
}
}
對於所有實際目的都是等效的。
因此,您需要將方法同步更改為等效的塊同步,然后可以將其替換為Lock
不,沒有辦法做到這一點,因為java.util.concurrent
因此Lock
或任何其他實現)只是一個庫,而synchronized
是Java Language Specification的一部分 。
關於“ Lock
可以替代同步”,Brian Goetz在“ Java並發實踐”第13.4章中對此進行了討論:
ReentrantLock
是用於內部鎖定不實際的情況的高級工具。 如果需要高級功能,請使用它:定時,輪詢或可中斷的鎖獲取,公平隊列或非塊結構鎖。 否則,建議同步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.