zoukankan      html  css  js  c++  java
  • sychronized 和 Lock的比较

    sychronized是在jvm层面上实现的,可以通过一些监控工具监控sychronized的锁定,而且在代码执行出现异常时,jvm会自动释放锁,但是使用Lock就不行,lock是通过代码实现的,最终需要在finally中释放。

    ReentranLock同样拥有synchronized相同的并发性和内存语义,不过它还多了锁投票、定时锁和中断锁,比如说对于中断锁,当一个线程等待了足够长的时间还没有等待到资源的话,就中断等待,去干别的事情;ReentranLock还可以使锁更加公平。

    在资源竞争不是很激烈的情况下,synchronized的性能要优于ReentranLock,但是在资源竞争很激烈的情况下,sychronized的性能会下降严重,而ReentranLock的性能则可以维持.

    同样在资源竞争激烈的情况下,Atomic会比ReentranLock的性能更优,不过Atomic有一个确定就是只能同步一个值,一段代码中只能出现一个Atomic的变量,多了就无法同步。

    而对于ReentranLock来说,则可以结合Condition实现多个谓词的并发对象,通过调用await()和signal()方法进行等待锁和释放锁。而在synchronized中是调用wait()、notify()、notifyAll()来进行线程间的通信。

  • 相关阅读:
    iOS-汽车品牌app
    iOS-英雄联盟人物展示
    工作与梦想中的工作:给计算机专业学生的建议
    c++ 宏的使用
    c++ 预处理的应用
    iOS-UItableView 多组表格
    ios-代理模式 协议小结
    c++有符号变量和无符号变量相加的结果
    ios-图片轮播器
    ios-倒计时
  • 原文地址:https://www.cnblogs.com/xulibing/p/6040937.html
Copyright © 2011-2022 走看看