synchronize方法和 synchronized 块都不存在没有释放锁的问题,无论是发生异常或者中途返回
例如下面的代码,还是会正确的释放锁
再看下面的代码
用 lock unlock来获取 释放锁,我们会发现程序没有执行unlock就return了,这就导致锁没有被正确释放
正确的做法应该使用 Before After Pattern
如下,这样无论执行过程中发生什么异常都能释放锁
例如下面的代码,还是会正确的释放锁
void synchronized test(){
doSomething();
if(1==1)return;
doSomething2();
return;
}
再看下面的代码
用 lock unlock来获取 释放锁,我们会发现程序没有执行unlock就return了,这就导致锁没有被正确释放
void test(){
lock();
doSomething();
if(1==1)return;
doSomething2();
unlock();
return;
}
正确的做法应该使用 Before After Pattern
如下,这样无论执行过程中发生什么异常都能释放锁
void test(){
lock();
try{
doSomething();
if(1==1)return;
doSomething2();
return;
}finally{
unlock();
}
}