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()来进行线程间的通信。

  • 相关阅读:
    数据结构作业-二叉树
    51nod 1163 最高的奖励
    51nod 1091 线段的重叠
    实验1 顺序表及其应用
    51nod 1459 迷宫游戏 dijkstra模板
    html5拖拽
    onbeforeunload、onpagehide、onunload、onload、onpageshow的正确执行顺序
    HTML5游戏2D开发引擎
    如何定义现代浏览器
    api文档设计工具:RAML、Swagger
  • 原文地址:https://www.cnblogs.com/xulibing/p/6040937.html
Copyright © 2011-2022 走看看