美文网首页
Lock和Synchronized区别底层原理分析

Lock和Synchronized区别底层原理分析

作者: 要不再等等 | 来源:发表于2019-06-01 11:16 被阅读0次

Lock是java5后出现的,是在juc包。
synchronized实现原理其实就是通过monitorenter和monitorexit去获得锁和释放锁实现的,后续的线程会同步等待,如果一个代码块被synchronized修饰,其他线程无法获取锁,只能依次等待,synchronized是非公平锁。

1.synchronized锁什么时候释放?

1.获取锁的线程执行完了该代码块,会调用monitorexit释放锁
2.线程执行出现异常

2.Lock是java实现的类,synchronized是java中的关键词
3.synchronized缺陷?

1.Lock可以主动释放锁
2.synchronized是被动的

4.Lock的实现?

1.ReadWriteLock,读可以使用readLock,写可以使用writeLock
2.ReentrankLock,可重入锁,当然synchronzied也是可重入锁
3.ReentrankReadWriteLock,可重入的读写锁

5.公平锁

1.synchronzied是非公平锁
2.ReentrankLock默认是非公平锁,可以设置为公平锁

6.如何选择?

基于锁的功能点,根据实际场景
性能上:如果对性能要求不高,都可以,如果高的话可使用Lock,java8对synchronized进行了很多的优化,有偏向锁、轻量级锁、重量级锁(偏向锁表示无竞争,轻量级锁表示单线程,都不满足会膨胀为重量级锁)

7.下图为synchronized获取锁释放锁的过程:
image.png

相关文章

网友评论

      本文标题:Lock和Synchronized区别底层原理分析

      本文链接:https://www.haomeiwen.com/subject/yypotctx.html