Java 中的 synchronized 關鍵字透過取得物件鎖定來實現同步,防止多執行緒同時存取共享資源引發資料競爭。其使用方式包括同步方法和同步程式碼區塊,其中 this 表示當前物件。
synchronized
關鍵字用於同步對共享資源的訪問,防止多個執行緒同時存取同一個資源導致的資料競爭問題。它透過取得鎖定 (monitor
) 來實現同步。當一個執行緒獲得鎖後,其他執行緒則需要等待,直到鎖被釋放才能繼續執行。
鎖定與物件相關聯,當一個執行緒對一個物件加鎖時,其他執行緒不能對該物件加鎖。
synchronized
有兩種使用方式:
public synchronized void myMethod() { // 同步代码块 }
public void myMethod() { synchronized (this) { // 同步代码块 } }
this 表示目前物件。
public class UnsafeCounter { private int count = 0; public void increment() { count++; } }如果多個執行緒同時呼叫
increment() 方法,可能會導致
count 值不準確。為了解決這個問題,我們可以使用
synchronized 對
increment() 方法進行同步:
public class SafeCounter { private int count = 0; public synchronized void increment() { count++; } }現在,多個執行緒可以安全地呼叫
increment( ) 方法,因為該方法被
synchronized 關鍵字保護。
以上是Java平行程式設計中synchronized關鍵字的用法與原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!