• 您現在的位置是:首頁 >生活 > 2024-03-07 09:32:41 來源:

    synchronized和Lock的區別(synchronize)

    導讀 大家好,我是小夏,我來為大家解答以上問題。synchronized和Lock的區別,synchronize很多人還不知道,現在讓我們一起來看看吧!1、Synchron...

    大家好,我是小夏,我來為大家解答以上問題。synchronized和Lock的區別,synchronize很多人還不知道,現在讓我們一起來看看吧!

    1、Synchronize是修飾符,用synchronize修飾表示這個類或方法為同步的,在運行過程中會上同步鎖。

    2、  synchronized 方法:通過在方法聲明中加入 synchronized關鍵字來聲明 synchronized 方法。如:

    3、  public synchronized void accessVal(int newVal);

    4、  synchronized 方法控制對類成員變量的訪問:每個類實例對應一把鎖,每個 synchronized 方法都必須獲得調用該方法的類實例的鎖方能執行,否則所屬線程阻塞,方法一旦執行,就獨占該鎖,直到從該方法返回時才將鎖釋放,此后被阻塞的線程方能獲得 該鎖,重新進入可執行狀態。這種機制確保了同一時刻對于每一個類實例,其所有聲明為 synchronized 的成員函數中至多只有一個處于可執行狀態(因為至多只有一個能夠獲得該類實例對應的鎖),從而有效避免了類成員變量的訪問沖突(只要所有可能訪問類成員變 量的方法均被聲明為 synchronized)。

    5、  在 Java 中,不光是類實例,每一個類也對應一把鎖,這樣我們也可將類的靜態成員函數聲明為 synchronized ,以控制其對類的靜態成員變量的訪問。

    6、  synchronized 方法的缺陷:若將一個大的方法聲明為synchronized 將會大大影響效率,典型地,若將線程類的方法 run() 聲明為 synchronized ,由于在線程的整個生命期內它一直在運行,因此將導致它對本類任何 synchronized 方法的調用都永遠不會成功。當然我們可以通過將訪問類成員變量的代碼放到專門的方法中,將其聲明為 synchronized ,并在主方法中調用來解決這一問題,但是 Java 為我們提供了更好的解決辦法,那就是 synchronized 塊。

    本文到此講解完畢了,希望對大家有幫助。

  • 成人app