Synchronized与Lock的区别和优缺点

1.  synchronized 是 Java 的一个内置特性关键字,而 Lock 是 Java 的一个接口类;

2.  synchronized 在发生异常时会自动释放线程占用的锁,而 Lock 在发生异常时(不发生也一样)需要主动在 finally 中调用 unLock() 去释放锁;

3.  Lock 可以让等待锁的线程响应中断,而 synchronized 无法响应中断,会一直等待下去;

4.  Lock 可以知道有没有成功获取到锁,而 synchronized 无法办到;

5.  Lock 可以提高多线程进行读操作的效率,而 synchronized 不可以;

6.  在性能上来说如果竞争资源不激烈则两者差距不大,如果竞争资源非常激烈(很多线程同时抢占)时 Lock 的性能远远好于 synchronized;

7.  不过要注意 Lock 只能中断阻塞中的线程,一旦获取到锁进入运行状态就无法中断;

8.  Lock 和 synchronized 都可以保证内存可见性。

原文地址:https://www.cnblogs.com/yhcTACK/p/15440817.html