Java中鎖分為獨占鎖和共享鎖。獨占鎖是指在同一時刻只能由一個線程占有的鎖,而共享鎖則可以由多個線程同時占有的鎖。
Java中的獨占鎖可以使用synchronized關鍵字實現。synchronized關鍵字被用于修飾方法或代碼塊時,它會保證同一時刻只能有一個線程執行帶有該關鍵字的代碼塊或方法。在synchronized關鍵字加鎖的情況下,其他想要執行該代碼塊或方法的線程必須等待當前線程釋放鎖。當然,synchronized關鍵字還可以加在靜態方法或類上,通過類鎖實現獨占鎖。
public synchronized void method(){ /* 獨占鎖代碼塊 */ }
Java中的共享鎖可以使用ReadWriteLock接口實現。ReadWriteLock接口定義了一組可以讓多個線程共享讀的鎖和只能由一個線程占有寫鎖的方法。在使用ReadWriteLock時,多個線程可以同時占有讀鎖,而在寫鎖被占有時,其他線程要等待寫鎖被釋放。
ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); Lock writeLock = readWriteLock.writeLock(); Lock readLock = readWriteLock.readLock(); //獲取讀鎖 readLock.lock(); try{ /* 共享鎖讀取代碼塊 */ }finally{ readLock.unlock(); } //獲取寫鎖 writeLock.lock(); try{ /* 獨占鎖寫入代碼塊 */ }finally{ writeLock.unlock(); }
在實際開發中,應該根據具體情況選擇獨占鎖或共享鎖,以達到最優的性能。
下一篇fc博客php