Java中的synchronized
關鍵字主要用于實現同步,它可以用于修飾方法或者以代碼塊的形式出現。synchronized
可以確保在同一時刻只有一個線程能夠訪問被保護的資源,從而實現線程安全。
然而,synchronized
關鍵字并不能直接用于讀寫鎖。讀寫鎖是一種特殊的鎖,它允許多個線程同時讀取共享資源,但在寫入時會阻止其他線程訪問。Java中提供了ReentrantReadWriteLock
類來實現讀寫鎖。
要使用ReentrantReadWriteLock
,你需要創建一個實例,然后使用readLock()
和writeLock()
方法分別獲取讀鎖和寫鎖。這里是一個簡單的示例:
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockExample {
private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
private int data = 0;
public void writeData(int newData) {
readWriteLock.writeLock().lock();
try {
data = newData;
System.out.println("Data updated to: " + data);
} finally {
readWriteLock.writeLock().unlock();
}
}
public int readData() {
readWriteLock.readLock().lock();
try {
System.out.println("Data read as: " + data);
return data;
} finally {
readWriteLock.readLock().unlock();
}
}
}
在這個示例中,我們使用ReentrantReadWriteLock
來實現讀寫鎖。當調用writeData()
方法時,線程會獲取寫鎖,確保在更新數據時不會有其他線程讀取或寫入數據。當調用readData()
方法時,線程會獲取讀鎖,允許多個線程同時讀取數據,但在寫入時會阻止其他線程訪問。