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 = https://www.yisu.com/ask/0;"hljs">int newData) { readWriteLock.writeLock().lock(); try { data = https://www.yisu.com/ask/newData;"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()
方法时,线程会获取读锁,允许多个线程同时读取数据,但在写入时会阻止其他线程访问。