synchronized和lock的区别

synchronized:

能够隐式得加锁和解锁

 

lock:

加锁和解锁必须显式,虽然代码不够优雅,但是灵活性较高,如下情况下最好使用lock:

1.需要尝试获取锁,但是等待一定时间后,放弃锁的获取。

Lock lock=new ReentrantLock(); boolean flag=false; try{ flag=lock.tryLock(2,TimeUnit.SECONDS); } catch(InterruptedException e) { //do something. } finally{ if(flag) lock.unlock(); } 

2.同步块内出现异常,需要处理一些清理工作。

3.需要更细的控制粒度。

 

你可能感兴趣的:(工作)