import java.util.concurrent.locks.ReentrantReadWriteLock;
public class ReadWriteLockExample {
private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
private final ReentrantReadWriteLock.ReadLock readLock = rwl.readLock();
private final ReentrantReadWriteLock.WriteLock writeLock = rwl.writeLock();
private String data;
// 读操作
public String read() {
readLock.lock();
try {
// 模拟读取数据的耗时操作
Thread.sleep(100);
return data;
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
readLock.unlock();
}
}
// 写操作
public void write(String newData) {
writeLock.lock();
try {
// 模拟写入数据的耗时操作
Thread.sleep(100);
this.data = newData;
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
writeLock.unlock();
}
}
}
ReentrantReadWriteLock:这是一个可重入的读写锁,允许多个线程同时读取数据(读锁),但在写操作(写锁)时会排他,确保数据的一致性。
读锁(ReadLock):
readLock.lock():获取读锁。多个线程可以同时持有读锁。readLock.unlock():释放读锁。写锁(WriteLock):
writeLock.lock():获取写锁。写锁是排他的,即同一时间只能有一个线程持有写锁,且在写锁被持有的时候,其他线程不能获取读锁。writeLock.unlock():释放写锁。读操作(read方法):
写操作(write方法):
异常处理:
try-finally块确保无论是否发生异常,锁都能被正确释放,避免死锁。模拟耗时操作:
Thread.sleep(100)模拟读取和写入数据时的耗时操作,以更好地展示锁的行为。上一篇:java list.sort
下一篇:java基础数据类型
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站