• synchronized 和 lock 的用法区别

    • synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized 可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。
    • lock(显示锁):需要显示指定起始位置和终止位置。一般使用 ReentrantLock 类做为锁,多个线程中必须要使用一个 ReentrantLock 类做为对象才能保证锁的生效。且在加锁和解锁处需要通过 lock() 和 unlock() 显示指出。所以一般会在 finally 块中写 unlock() 以防死锁。
  • synchronized 和 lock 性能区别 synchronized 是托管给 JVM 执行的,而 lock 是 Java 写的控制锁的代码。在 JDK 1.5 中,synchronize 是性能低效的。因为这是一个重量级操作,需要调用操作接口,导致有可能加锁消耗的系统时间比加锁以外的操作还多。相比之下使用 Java 提供的 Lock 对象,性能更高一些。但是到了 JDK 1.6,发生了变化。synchronize 在语义上很清晰,可以进行很多优化,有适应自旋,锁消除,锁粗化,轻量级锁,偏向锁等等。导致在 JDK 1.6 上 synchronize 的性能并不比 Lock 差。

  • synchronized 和 lock 机制区别

    • synchronized 原始采用的是 CPU 悲观锁机制,即线程获得的是独占锁。独占锁意味着其 他线程只能依靠阻塞来等待线程释放锁。
    • Lock 用的是乐观锁方式。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是 CAS 操作(Compare and Swap)。

最新文章

  1. gulp同步执行任务
  2. STL之list
  3. 第21/24周 性能监控(PAL工具)
  4. 【EF学习笔记12】----------解释查询和本地查询 区分 Enumerable 和 Queryable
  5. HBase权威指南环境配置
  6. 如何清除win7开机密码
  7. Oracle inactive session (last_call_et)
  8. MATLAB中求矩阵非零元的坐标
  9. 17、手把手教你Extjs5(十七)模块的新增、修改、删除操作
  10. selenium 定位input输入框下的选择项
  11. Download a image 图片另存为
  12. Gitlab - Pull Request
  13. 如何使用ZOL一键安装器下载中关村在线的源安装包
  14. CentOS下Redis的安装(转)
  15. Python 的 GUI 开发工具
  16. 【BZOJ4998】星球联盟
  17. SpringBoot读取配置文件(从classpath/file读取yml/properties文件)
  18. Linux C++调试利器-gdb
  19. A2dp连接流程源码分析
  20. Openlayers离线载入天地图

热门文章

  1. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第4节 maven生命周期和概念模型图_09maven概念模型图
  2. 【漏洞学习】HOST 头攻击漏洞
  3. docker 安装mysql 并将文件挂载到本地
  4. Linux-定时任务-打包与压缩
  5. BCD与ASCII码互转-C语言实现
  6. 关于telnet的妙用
  7. [转帖]Oracle dba_objects和all_objects 最大的区别
  8. SparkStreaming DStream转换
  9. Spark-Core RDD转换算子-双Value型交互
  10. windows上Appium安装和使用