共計 703 個字符,預計需要花費 2 分鐘才能閱讀完成。
在 Java 中,悲觀鎖的實現(xiàn)方式有兩種:
- synchronized 關(guān)鍵字:synchronized 關(guān)鍵字可以用來修飾方法或代碼塊,當一個線程獲得了對象的鎖,其他想要訪問該對象的線程就必須等待。synchronized 關(guān)鍵字可以保證代碼塊的原子性操作,避免多個線程同時修改共享數(shù)據(jù)而引發(fā)的并發(fā)問題。
示例代碼:
public class LockExample {private int count = 0;
public synchronized void increment() {count++;}
}
- ReentrantLock 類:ReentrantLock 是 Java 提供的一個可重入鎖(可多次獲取同一個鎖),可以通過 lock() 方法獲取鎖,并通過 unlock() 方法釋放鎖。ReentrantLock 類提供了更多的靈活性和功能,例如可以設置公平性、可以中斷等待的線程等。
示例代碼:
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {private int count = 0;
private ReentrantLock lock = new ReentrantLock();
public void increment() {lock.lock();
try {count++;} finally {lock.unlock();
}
}
}
這兩種方式都是悲觀鎖的實現(xiàn)方式,因為它們都假設會出現(xiàn)并發(fā)沖突,因此在訪問共享資源之前先獲取鎖,并阻塞其他線程的訪問。與之相反,樂觀鎖則是假設不會出現(xiàn)并發(fā)沖突,直接進行操作,并在提交時檢查是否有其他線程修改了數(shù)據(jù)。
丸趣 TV 網(wǎng) – 提供最優(yōu)質(zhì)的資源集合!
正文完
發(fā)表至: Java
2023-12-13