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()
方法时,线程会获取读锁,允许多个线程同时读取数据,但在写入时会阻止其他线程访问。