在Java中,我們可以使用鎖來防止多個線程同時訪問共享資源。一般來說,鎖可以分為獨占鎖和共享鎖兩種。下面讓我們一起來看看java獨占鎖和共享鎖。
獨占鎖: synchronized (obj) { // 對obj進行操作 }
在上述代碼中,synchronized關鍵字表示獲取obj對象的鎖。這是一種獨占鎖的方式,表示只有一個線程可以獲得obj對象的鎖,其他線程必須等待該線程釋放鎖之后才可以獲取鎖。
共享鎖: ReadWriteLock rwl = new ReentrantReadWriteLock(); rwl.readLock().lock(); try { // 對共享資源進行讀取操作 } finally { rwl.readLock().unlock(); } rwl.writeLock().lock(); try { // 對共享資源進行寫入操作 } finally { rwl.writeLock().unlock(); }
上面的代碼中,我們使用ReentrantReadWriteLock類來獲取讀寫鎖,使用readLock()方法來獲取共享讀鎖,使用writeLock()方法來獲取獨占寫鎖。共享讀鎖可以同時被多個線程獲取,表示多個線程可以同時訪問共享資源。但是如果一個線程獲取了寫鎖,那么其他線程需要等待該線程釋放鎖之后才能獲取鎖。