java中常见问题归集

一、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 }


猜你喜欢

转载自www.cnblogs.com/tombky/p/12664360.html