java-----synchronized和Lock的区别

1 synchronized 和 Lock的区别

     a) 存在层次

         synchronized是关键字,在jvm层面上,由内置语言实现。

         Lock是接口、类。

     b) 锁的释放

         synchronized在线程发生异常时会自动释放锁,因此不会发生异常死锁。

         Lock异常时不会自动释放锁,必须手动在finally中释放锁。

     c) 锁的类型和状态

         synchronized是非中断锁(必须等待线程执行完成释放锁)、不可判断(判断是否有锁),非公平(等待的时间不一样)。

         Lock是可中断锁(可以手动中断)、可判断(判断是否有锁),公平(两者皆可)。    

     d) 使用 及 性能

         synchronized用于少量代码的同步。

         Lock用于大量代码的同步。

         Lock锁可以使用读锁提高多线程读效率。

 2 synochronied的缺点

      a) 不能响应进行中断;

      b) 同一时刻无论是读写都只能有一个线程对共享资源进行操作,其他线程只能进行等待。

      c) 锁的释放是由虚拟机内部进行操作,不可进行人工操作干预,既有优点,又有缺点。

          优点就是不用担心会造成死锁,抛出异常后,会自动释放该锁。

          缺点就当有一个线程获取了对应的锁并执行之后,其他线程便只能一直等待,直到线程释放该锁,这样会导致性能偏低

     解决:

        Lock接口的提出就是为了完善synchronized得不完美,变成了jdk层面实现的接口,可以人工灵活的对共享资源变量的操作和控制,无论读还是写的操作。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/qq_42081709/article/details/89598590

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值