美文网首页Java
Lock与synchronized 的区别

Lock与synchronized 的区别

作者: 错位的季节 | 来源:发表于2017-10-12 11:29 被阅读2次

    1、ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候
    线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
    如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
    如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情
    2、synchronized是Java中的关键字,synchronized是内置的语言实现,是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定.使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中
    3、在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;
    4)通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。

    相关文章

      网友评论

        本文标题:Lock与synchronized 的区别

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