synchronized和Lock的异同

  • Java提供了两种锁机制实现对某个共享资源的同步:synchronized和Lock

    1. synchronized:多个线程访问同一个共享资源,将该资源设置为锁对象,调用Object类中wait(),notify()和notifyAll()调度机制进行线程之间的通信。
    2. Lock:使用Condition进行线程之间的调度
  • 两者的区别:
    1. 用法不一样:synchronized是交给JVM执行的,Lock是通过代码调用实现的,比synchronized有更精准的语义。

      • 在需要同步的对象加入synchronized控制,可以加载特定的代码上;也可以加在方法上。在特定的代码块上,括号中为锁对象,也就是要共享的资源。
      • Lock现实的指定起始位置和终止位置
    2. 性能不一样:在JDK1.5中中增加了一个Lock接口的实现类ReentrantLock。它不仅拥有和synchronized相同的并发性和内存语义,还多了锁投票,定时锁,等候和中断锁等。在不同的情况下会有所不同:在竞争资源不是很激烈的情况下,synchronized的性能下降的很快,ReentrantLock性能保持不变
    3. 锁机制不一样:synchronized获得锁和释放的方式都是在代码块结构中的,当获取多个锁时,必须以相反的顺序释放,并且是自动释放,不会因为出现了异常导致锁没有被释放而引发死锁。ReentrantLock需要手动解锁,必须在finally块中释放,否则会出现死锁问题。
      1. 可以通过tryLock方法,采用非阻塞方式去尝试获得锁资源

synchronized和Lock的异同相关推荐

  1. Java多线程学习十三:synchronized 和 Lock 区别以及孰优孰劣,如何选择?

    synchronized 和 Lock 的异同点,以及该如何选择. 相同点 synchronized 和 Lock 的相同点非常多,我们这里重点讲解 3 个比较大的相同点 ABC. A:synchro ...

  2. 如何解决线程安全问题?有几种方式?synchronized与lock有什么异同?

    1.谈谈你对同步代码块中同步监视器和共享数据的理解以及各自要求? 同步监视器:俗称锁.①任何一个类的对象都可以充当:②多个线程共用同一把锁. 共享数据:多个线程共同操作的数据. 2.什么情况会产生线程 ...

  3. 【java线程】锁机制:synchronized、Lock、Condition

    [Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...

  4. java并发vol_java 并发中 volitile、synchronized和lock的比较(一)

    1.volitile和(synchronnized.lock) 首先比较volitile和synchronnized,volitile线程不安全,但是synchronized则是线程安全的. voli ...

  5. synchronized与Lock的区别与使用

    原文链接 https://blog.csdn.net/u012403290/article/details/64910926 ###引言: 昨天在学习别人分享的面试经验时,看到Lock的使用.想起自己 ...

  6. 解决多线程安全问题-无非两个方法synchronized和lock 具体原理以及如何 获取锁AQS算法 (百度-美团)

    解决多线程安全问题-无非两个方法synchronized和lock 具体原理以及如何 获取锁AQS算法 (百度-美团) 参考文章: (1)解决多线程安全问题-无非两个方法synchronized和lo ...

  7. synchronized 与 Lock 的那点事

    原文:http://www.cnblogs.com/benshan/p/3551987.html 最近在做一个监控系统,该系统主要包括对数据实时分析和存储两个部分,由于并发量比较高,所以不可避免的使用 ...

  8. Synchronized和Lock有什么区别

    前言 早期的时候我们对线程的主要操作为: synchronized wait notify 然后后面出现了替代方案 lock await singal 问题 synchronized 和 lock 有 ...

  9. JUC里面的相关分类|| java并发编程中,关于锁的实现方式有两种synchronized ,Lock || Lock——ReentrantLock||AQS(抽象队列同步器)

    JUC分类 java并发编程中,关于锁的实现方式有两种synchronized ,Lock AQS--AbstractQueuedSynchronizer

  10. 题目:三个售票员 卖出 30张票 || 多线程编程的企业级套路+模板||synchronized与Lock的区别

    package com.dym.juc;//资源类 class Ticket {private int number =30;public synchronized void saleTicket() ...

最新文章

  1. nginx安装-添加MP4播放模块
  2. 几个重要的 ASM Disk Groups 参数
  3. 百度UEditor编辑器关闭抓取远程图片功能(默认开启)
  4. win7 64位 安装java jdk1.8 ,修改配置环境变量
  5. Android应用开发经常使用知识
  6. mysql导入向导,SQL Server--导入和导出向导
  7. 在自己笔记本电脑上如何访问虚拟机的内容、包括可以使用ssh、访问tomcat、访问nginx
  8. Refactoring
  9. 【华为出品】物联网全栈开发实战营第2期来啦!送海思开发板
  10. Django ORM 数据库操作
  11. 谈谈软件工程设计的艺术
  12. 2018-2019-2 20165234 《网络对抗技术》 Exp5 MSF基础应用
  13. ORACLE AWR简介
  14. 解决springboot启动失败问题:Unable to start embedded container;
  15. 第十节:Web爬虫之数据存储与MySQL8.0数据库安装和数据插入
  16. halcon显示坐标_机器视觉之halcon入门(10)-一文弄懂halcon例程:color_fuse.hdev
  17. Ubuntu系统详细分析【1-10】
  18. JavaWeb汽车商城项目
  19. 图像增广——图片旋转任意角度(python实现)
  20. Spark安装与配置(单机版)(保姆级教程)

热门文章

  1. 连续值特征分桶区间设置
  2. android studio JNI Cmake Erro at 运行失败
  3. 逆向基础-Windows驱动开发【SSDT HOOK】
  4. matlab 根轨迹 系统单位阶跃响应,二阶系统单位阶跃响应MATLAB仿真设计.doc
  5. 使用HSqlDB的SQL/JRT功能
  6. python-认识(第五段-函数)
  7. ML - 分类算法的评价
  8. zabbix 5.0所有依赖包_开源的Zabbix报表系统ZbxTable正式发布!
  9. form表单内子元素组件按钮button事件冲突 - Vue
  10. Word无法打开该文件,因为文件格式与文件扩展名不匹配。Microsoft Word无法从该位置打开扩展名为.asd的文件。请将此文件移动到原始.asd位置,然后重试。