zoukankan      html  css  js  c++  java
  • 6,synchronized, lock 区别

    参考文档

    http://zzhonghe.iteye.com/blog/826162

    http://houlinyan.iteye.com/blog/1112535

    1,ReentrantLock 拥有Synchronized相同的并发性和内存语义,此外还多了 锁投票,定时锁等候和中断锁等候
         线程A和B都要获取对象O的锁定,假设A获取了对象O锁,B将等待A释放对O的锁定,
         如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
         如果 使用ReentrantLock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情

    2,synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,
       JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中

    3,在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,
          Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态

    所以,我们写同步的时候,优先考虑synchronized,如果有特殊需要,再进一步优化。ReentrantLock如果用的不好,不仅不能提高性能,还可能带来灾难。 

    因为写的不熟练的人,或不注意的时候,容易出现死锁

    用例可以参考上两篇文章

    临界区之synchronized 

    http://www.cnblogs.com/zyguo/p/4347021.html

    临界区之lock 

    http://www.cnblogs.com/zyguo/p/4362880.html

  • 相关阅读:
    十一、docker仓库
    十、Docker容器:磁盘&内存&CPU资源限制实战
    八、docker的跨主机网络通信--flanneld
    九、dockerfile制作docker 镜像
    七、自己定制一个docker镜像
    六、docker的数据卷
    五、docker容器的网络访问
    四、docker容器的操作
    三、docker的镜像操作
    商品SKU
  • 原文地址:https://www.cnblogs.com/zyguo/p/4363026.html
Copyright © 2011-2022 走看看