Java 中的鎖機(jī)制是一種多線程編程中常用的解決方案,因?yàn)槎嗑€程共享資源,如果不采取任何措施,有可能導(dǎo)致數(shù)據(jù)不一致的問題。
Java 中的鎖機(jī)制可以分為兩種類型:樂觀鎖和悲觀鎖。
樂觀鎖與悲觀鎖的區(qū)別:悲觀鎖認(rèn)為每次訪問共享資源時(shí)一定會(huì)出現(xiàn)沖突,在訪問之前就加鎖,而樂觀鎖則認(rèn)為沖突的概率很小,只有在提交操作時(shí)才會(huì)進(jìn)行沖突檢測(cè)。
// 悲觀鎖示例:使用 synchronized 加鎖 public class PessimisticLock { private int count; public synchronized void add(int num){ this.count += num; } public synchronized int getCount(){ return this.count; } } // 樂觀鎖示例:使用 CAS(Compare And Swap)操作 import sun.misc.Unsafe; public class OptimisticLock { private volatile int count; private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long valueOffset; static { try { valueOffset = unsafe.objectFieldOffset(OptimisticLock.class.getDeclaredField("count")); } catch (Exception ex) { throw new Error(ex); } } public void add(int num){ int oldValue; int newValue; do { oldValue = this.count; newValue = oldValue + num; } while (!unsafe.compareAndSwapInt(this, valueOffset, oldValue, newValue)); } public int getCount(){ return this.count; } }
在實(shí)際開發(fā)中,選擇樂觀鎖還是悲觀鎖需要基于具體業(yè)務(wù)需求和并發(fā)量等方面進(jìn)行綜合考慮。
上一篇oc_oracle