欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java 樂觀鎖和悲觀鎖

李中冰2年前9瀏覽0評論

在Java編程中,鎖是一個很基本的概念,用來在多線程環境下對共享資源進行同步訪問。對于鎖的使用場景,一般可以分為兩類:樂觀鎖和悲觀鎖。

樂觀鎖是一種相對比較輕量級的鎖策略,其核心思想就是假設多個線程訪問共享資源時不會發生沖突,因此,在讀取數據時不加鎖,在寫入數據時采用CAS(比較交換)算法進行版本控制,以保證并發修改時的數據正確性。

public class OptimisticLockDemo {
private int count = 0;
private AtomicInteger atomicCount = new AtomicInteger(0);
public void increase() {
int newValue = atomicCount.incrementAndGet();
if (newValue >10) {
throw new RuntimeException("超過最大值");
}
count++;
System.out.println(Thread.currentThread().getName() + " count:" + count + " newValue:" + newValue);
}
}

上述代碼中,使用AtomicInteger進行計數,版本控制在incrementAndGet()方法中完成。

相較于樂觀鎖,悲觀鎖則是一種更加保守、更加安全的鎖策略。其核心思想就是認為在多線程環境下一定會發生沖突,因此,在讀取和寫入數據時都需要加鎖,以防止并發修改時的數據錯誤。

public class PessimisticLockDemo {
private static int count = 0;
public static synchronized void increase() {
count++;
System.out.println(Thread.currentThread().getName() + " count:" + count);
}
}

上述代碼中,使用synchronized關鍵字保證線程同步。

需要注意的是,悲觀鎖會比樂觀鎖占用更多的資源,因此在性能敏感的場景中應盡量采用樂觀鎖,而在一些復雜的數據結構操作中,悲觀鎖可能是唯一的選擇。