public class ReaderWriterLock {
public static void main(String[] args) {
DataContainer<String> dataContainer=new DataContainer<>();
new Thread(()->{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(dataContainer.read());
},"t1").start();
/*new Thread(()->{
dataContainer.read();
},"t2").start();*/
new Thread(()->{
dataContainer.write("test");
},"t3").start();
}
}
class DataContainer<T>{
private T Data;
ReentrantReadWriteLock rw=new ReentrantReadWriteLock();
ReentrantReadWriteLock.ReadLock read=rw.readLock();
ReentrantReadWriteLock.WriteLock write=rw.writeLock();
public T read(){
System.out.println(Thread.currentThread().getName()+":尝试获取读锁..");
read.lock();
try{
System.out.println(Thread.currentThread().getName()+":得到读锁");
}finally {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":释放读锁");
read.unlock();
return Data;
}
}
public void write(T news){
System.out.println(Thread.currentThread().getName()+":尝试获取写锁..");
write.lock();
try {
System.out.println(Thread.currentThread().getName()+":得到写锁");
System.out.println("写入...");
Data=news;
}
finally {
System.out.println(Thread.currentThread().getName()+":释放读锁");
write.unlock();
}
}
}
AQS之读写锁
最新推荐文章于 2023-10-09 14:44:07 发布