java ReentrantLock的重入测试

本教程操作环境:windows7系统、java10版,DELL G3电脑。

1、概念

可重入的读写锁,读写锁内部维护了一个ReadLock和一个WriteLock,底层还是AQS,但是AQS只有一个state状态量,如何同时控制读和写呢,这里使用了state(int)的高16位表示读状态,低16为表示写,高16位的值代表获取读锁的线程数,低16位代表写锁的可重入数。

2、原理

利用CAS+AQS队列来实现。它支持公平锁和非公平锁,两者的实现类似

3、实例

publicclassReentrantDemoimplementsRunnable{
Locklock=newReentrantLock();
@Override
publicvoidrun(){
set();
}
publicvoidset(){
try{
lock.lock();
System.out.println("set方法");
get();
}catch(Exceptione){
e.printStackTrace();
}finally{
lock.unlock();//必须在finally中释放
}
}

publicvoidget(){

try{
lock.lock();
System.out.println("get方法");
}catch(Exceptione){
e.printStackTrace();
}finally{
lock.unlock();
}
}
publicstaticvoidmain(String[]args){
ReentrantDemoreentrantDemo=newReentrantDemo();
newThread(reentrantDemo).start();
}
}
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容