synchronized和Lock的异同
synchronized和Lock的异同
- Java提供了两种锁机制实现对某个共享资源的同步:synchronized和Lock
- synchronized:多个线程访问同一个共享资源,将该资源设置为锁对象,调用Object类中wait(),notify()和notifyAll()调度机制进行线程之间的通信。
- Lock:使用Condition进行线程之间的调度
- 两者的区别:
- 用法不一样:synchronized是交给JVM执行的,Lock是通过代码调用实现的,比synchronized有更精准的语义。
- 在需要同步的对象加入synchronized控制,可以加载特定的代码上;也可以加在方法上。在特定的代码块上,括号中为锁对象,也就是要共享的资源。
- Lock现实的指定起始位置和终止位置
- 性能不一样:在JDK1.5中中增加了一个Lock接口的实现类ReentrantLock。它不仅拥有和synchronized相同的并发性和内存语义,还多了锁投票,定时锁,等候和中断锁等。在不同的情况下会有所不同:在竞争资源不是很激烈的情况下,synchronized的性能下降的很快,ReentrantLock性能保持不变
- 锁机制不一样:synchronized获得锁和释放的方式都是在代码块结构中的,当获取多个锁时,必须以相反的顺序释放,并且是自动释放,不会因为出现了异常导致锁没有被释放而引发死锁。ReentrantLock需要手动解锁,必须在finally块中释放,否则会出现死锁问题。
- 可以通过tryLock方法,采用非阻塞方式去尝试获得锁资源
- 用法不一样:synchronized是交给JVM执行的,Lock是通过代码调用实现的,比synchronized有更精准的语义。
synchronized和Lock的异同相关推荐
- Java多线程学习十三:synchronized 和 Lock 区别以及孰优孰劣,如何选择?
synchronized 和 Lock 的异同点,以及该如何选择. 相同点 synchronized 和 Lock 的相同点非常多,我们这里重点讲解 3 个比较大的相同点 ABC. A:synchro ...
- 如何解决线程安全问题?有几种方式?synchronized与lock有什么异同?
1.谈谈你对同步代码块中同步监视器和共享数据的理解以及各自要求? 同步监视器:俗称锁.①任何一个类的对象都可以充当:②多个线程共用同一把锁. 共享数据:多个线程共同操作的数据. 2.什么情况会产生线程 ...
- 【java线程】锁机制:synchronized、Lock、Condition
[Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...
- java并发vol_java 并发中 volitile、synchronized和lock的比较(一)
1.volitile和(synchronnized.lock) 首先比较volitile和synchronnized,volitile线程不安全,但是synchronized则是线程安全的. voli ...
- synchronized与Lock的区别与使用
原文链接 https://blog.csdn.net/u012403290/article/details/64910926 ###引言: 昨天在学习别人分享的面试经验时,看到Lock的使用.想起自己 ...
- 解决多线程安全问题-无非两个方法synchronized和lock 具体原理以及如何 获取锁AQS算法 (百度-美团)
解决多线程安全问题-无非两个方法synchronized和lock 具体原理以及如何 获取锁AQS算法 (百度-美团) 参考文章: (1)解决多线程安全问题-无非两个方法synchronized和lo ...
- synchronized 与 Lock 的那点事
原文:http://www.cnblogs.com/benshan/p/3551987.html 最近在做一个监控系统,该系统主要包括对数据实时分析和存储两个部分,由于并发量比较高,所以不可避免的使用 ...
- Synchronized和Lock有什么区别
前言 早期的时候我们对线程的主要操作为: synchronized wait notify 然后后面出现了替代方案 lock await singal 问题 synchronized 和 lock 有 ...
- JUC里面的相关分类|| java并发编程中,关于锁的实现方式有两种synchronized ,Lock || Lock——ReentrantLock||AQS(抽象队列同步器)
JUC分类 java并发编程中,关于锁的实现方式有两种synchronized ,Lock AQS--AbstractQueuedSynchronizer
- 题目:三个售票员 卖出 30张票 || 多线程编程的企业级套路+模板||synchronized与Lock的区别
package com.dym.juc;//资源类 class Ticket {private int number =30;public synchronized void saleTicket() ...
最新文章
- nginx安装-添加MP4播放模块
- 几个重要的 ASM Disk Groups 参数
- 百度UEditor编辑器关闭抓取远程图片功能(默认开启)
- win7 64位 安装java jdk1.8 ,修改配置环境变量
- Android应用开发经常使用知识
- mysql导入向导,SQL Server--导入和导出向导
- 在自己笔记本电脑上如何访问虚拟机的内容、包括可以使用ssh、访问tomcat、访问nginx
- Refactoring
- 【华为出品】物联网全栈开发实战营第2期来啦!送海思开发板
- Django ORM 数据库操作
- 谈谈软件工程设计的艺术
- 2018-2019-2 20165234 《网络对抗技术》 Exp5 MSF基础应用
- ORACLE AWR简介
- 解决springboot启动失败问题:Unable to start embedded container;
- 第十节:Web爬虫之数据存储与MySQL8.0数据库安装和数据插入
- halcon显示坐标_机器视觉之halcon入门(10)-一文弄懂halcon例程:color_fuse.hdev
- Ubuntu系统详细分析【1-10】
- JavaWeb汽车商城项目
- 图像增广——图片旋转任意角度(python实现)
- Spark安装与配置(单机版)(保姆级教程)
热门文章
- 连续值特征分桶区间设置
- android studio JNI Cmake Erro at 运行失败
- 逆向基础-Windows驱动开发【SSDT HOOK】
- matlab 根轨迹 系统单位阶跃响应,二阶系统单位阶跃响应MATLAB仿真设计.doc
- 使用HSqlDB的SQL/JRT功能
- python-认识(第五段-函数)
- ML - 分类算法的评价
- zabbix 5.0所有依赖包_开源的Zabbix报表系统ZbxTable正式发布!
- form表单内子元素组件按钮button事件冲突 - Vue
- Word无法打开该文件,因为文件格式与文件扩展名不匹配。Microsoft Word无法从该位置打开扩展名为.asd的文件。请将此文件移动到原始.asd位置,然后重试。