本教程操作环境: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
暂无评论内容