synchronized和lock的区别

1.用途上

synchronized作用在本地方法,静态方法和代码块上。

lock需要指定起始位置,一般使用ReentranLock作为锁,多个线程中必须使用一个ReentranLock类作为对象才能保证锁的生效。加锁和解锁通过lock()和unlock()显示指出,一般会在finally中写unlock()防止死锁。

2.性能上

资源竞争激烈的情况下,lock性能比synchronized好;竞争不激烈的情况下synchronized比lock好,synchronized会根据锁的竞争情况,进行锁的优化。

3.锁的类型

synchronized可重入,不可中断,非公平锁;lock可重入,可中断,可公平锁。

4.锁状态

synchronized无法判断锁的状态,Lock可以判断锁的状态。

5.锁释放条件

synchronized同步代码块执行完后,会自动释放锁,线程发生异常时JVM会让线程释放锁。而lock必须在finally中释放锁,不然容易造成线程死锁。


版权声明:本文为weixin_43442127原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>