首页 > 编程语言 > 详细

java中常见问题归集

时间:2020-04-09 10:39:30      阅读:60      评论:0      收藏:0      [点我收藏+]

一、Java中为何要在try{}语句外Lock锁?

遵循最小化try-catch范围的原则

    查看文档可知

    void lock();

    lock方法是没有指定抛出的异常的,所以不应当包含到try-catch块中。

    unlock放到finally中也是为了保证业务无论异常与否,最终都要解除锁,释放资源避免死锁。

②代码逻辑决定
    在try-finally外加锁,如果因为异常导致加锁失败,try-finally块中的代码不会执行。相反,如果在try{}代码块中加锁失败,finally中的代码无论如何都会执行,但是由于当前线程加锁失败并没有持有lock对象锁 ,所以程序会抛出异常。
1 Lock lock = ...;
2 lock.lock();
3 try{
4     //处理任务
5 }catch(Exception ex){
6 
7 }finally{
8     lock.unlock();   //释放锁
9 }

 

二、ReentrantReadWriteLock设计的细节

  ReentrantReadWriteLock 实现了 ReadWriteLock 接口( 注意,ReentrantReadWriteLock 并没有实现 Lock 接口 ),其包含两个很重要的方法:readLock() 和 writeLock() 分别用来获取内部类读锁和写锁,并且这两个锁实现了Lock接口。

  体会这样设计的妙处:

        读写锁ReentrantReadWriteLock更强调的是获取读写锁的功能,所以实现ReadWriteLock接口,而不管是读锁还是写锁,都是??,要具备锁的功能,所以实现Lock接口。一句话:彼此的侧重点不同。



java中常见问题归集

原文:https://www.cnblogs.com/tombky/p/12664360.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!