簡體   English   中英

可以在方法級別同步被Lock代替嗎?

[英]can synchronized at method level be replaced by Lock?

在編寫線程安全類時,我們在代碼的兩個位置使用了synchronized關鍵字,

1.方法級同步

2.同步塊

就我所能想到的,像Lockjava.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或任何其他實現)只是一個庫,而synchronizedJava Language Specification的一部分

關於“ Lock可以替代同步”,Brian Goetz在“ Java並發實踐”第13.4章中對此進行了討論:

ReentrantLock是用於內部鎖定不實際的情況的高級工具。 如果需要高級功能,請使用它:定時,輪詢或可中斷的鎖獲取,公平隊列或非塊結構鎖。 否則,建議同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM