在Java中,要使類方法同步,可以使用synchronized
關鍵字。同步方法可以確保在同一時刻只有一個線程能夠訪問該方法,從而防止多線程環境下的數據不一致問題。
以下是一個簡單的示例,展示了如何將類方法同步:
public class SynchronizedExample {
private int counter = 0;
// 同步方法
public synchronized void increment() {
counter++;
}
// 同步代碼塊
public void decrement() {
synchronized (this) {
counter--;
}
}
public static void main(String[] args) {
SynchronizedExample example = new SynchronizedExample();
// 創建兩個線程,一個用于遞增計數器,另一個用于遞減計數器
Thread incrementThread = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
example.increment();
}
});
Thread decrementThread = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
example.decrement();
}
});
// 啟動線程
incrementThread.start();
decrementThread.start();
// 等待線程執行完成
try {
incrementThread.join();
decrementThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 輸出結果
System.out.println("Counter: " + example.counter);
}
}
在這個示例中,我們有兩個方法:increment()
和decrement()
。通過在方法聲明前添加synchronized
關鍵字,我們將其聲明為同步方法。這意味著在同一時刻只有一個線程能夠訪問這些方法。
另外,我們還可以使用同步代碼塊來實現同步。在decrement()
方法中,我們使用synchronized (this)
來同步代碼塊,其中this
表示當前對象實例。這樣,在同一時刻也只有一個線程能夠執行這個同步代碼塊內的代碼。