synchronized与Lock、volatile的区别
synchronized与volatile的区别
- volatile是线程同步的轻量级实现,因此volatile性能好于synchronized
- voaltile修饰变量,synchronized修饰方法和代码块
- 多线程访问volatile不会发生阻塞,但访问synchronized可能会阻塞
- volatile可以保证数据的可见性,但不能保证原子性;而synchronized既可以保证原子性,也可以间接保证可见性。
- volatile解决的是变量在多个线程之间的可见性,而Synchronized解决的是多个线程之间访问资源的同步性
synchronized与ReentrantLock的区别
- 都是可重入锁
- synchronized是依赖于JVM实现的;而reentrantLock是依赖于JDK实现的,是API层面的,需要Lock()和unLock()方法配合try/finally语句块来完成。
- reentrantLock比synchronized多了三项功能:等待可中断,可实现公平锁,可实现选择性通知(锁可绑定多个条件)。
等待可中断:等待可中断是指线程可以选择放弃等待,改为处理其他事情,ReenTrantLock通过lock.lockInterruptibly()来实现的。
公平锁:先等待的线程先获得锁。Synchronized只能是非公平锁。ReenTrantLock默认情况是非公平的,可以通过 ReentrantLock(boolean fair)构造方法来指定是公平锁还是非公平锁。
选择性通知:Synchronized关键字与wait()和notify/notifyAll()方法相结合可以实现等待/通知机制,但被通知的线程是由JVM随机选择。Synchronized相当于整个Lock对象中只有一个单一的condition对象,所有的线程都注册在它一个对象身上。线程开始notifyAll()时,需要通知所有等待的线程,没有选择权,会造成很大的效率问题。而ReenTrantLock可以借助Condition对象实现选择性通知,具有更好的灵活性。比如:可以在一个Lock对象里创建多个Condition实例(即对象监视器),线程对像可以注册在指定的Condition中,从而可以有选择的进行线程通知,即使使用signalAll()方法也只会唤醒注册在该Condition实例中所有等待的线程。
可重入锁:自己可以再次获取自己的内部锁。比如:一个线程获得了某个对象的锁,并且还没有释放,当这个线程再次想要获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死锁。
synchronized与Lock、volatile的区别的更多相关文章
- 用阻塞队列实现一个生产者消费者模型?synchronized和lock有什么区别?
多线程当中的阻塞队列 主要实现类有 ArrayBlockingQueue是一个基于数组结构的有界阻塞队列,此队列按FIFO原则对元素进行排序 LinkedBlockingQueue是一个基于链表结构的 ...
- synchronized 和 Lock 有什么区别?(未完成)
synchronized 和 Lock 有什么区别?(未完成)
- java面试题之synchronized和lock有什么区别
synchronized和lock的区别: 类别 synchronized lock 存在层次 java的关键字,在jvm层面上 是一个类 锁的释放 1.以获取锁的线程执行完同步代码,释放锁 2.线程 ...
- volatile、synchronized、lock有什么区别,以及在哪些场景下使用哪种方式?
[转]JVM锁机制volatile/synchronized/lock 1.volatile实现原理 (1)聊聊并发(一)——深入分析Volatile的实现原理 --硬件级别锁实现,Lock前缀指令会 ...
- synchronized和lock有什么区别?
一.原始构成 synchronized是关键字属于JVM层面,monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖monitor对象只有在同步代码块和同 ...
- java面试-synchronized与lock有什么区别?
1.原始构成: synchronized是关键字,属于JVM层面,底层是由一对monitorenter和monitorexit指令实现的. ReentrantLock是一个具体类,是API层面的锁. ...
- Java synchronized和 Lock 的区别与用法
在分布式开发中,锁是线程控制的重要途径.Java为此也提供了2种锁机制,synchronized和lock.做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方. ...
- Synchronized和lock的区别和用法
一.synchronized和lock的用法区别 (1)synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要 ...
- synchronized 与 lock 的区别
synchronized 和 lock 的用法区别 synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized 可以加在方法上,也可以加在特定代码块中,括号中表示需要锁 ...
- synchronized和Lock的区别是什么?
原创2020-11-19 11:38:29011024区别:1.lock是一个接口,而synchronized是java的一个关键字.2.synchronized在发生异常时会自动释放占有的锁 ...
随机推荐
- 三大数据库 sequence 之华山论剑 (下篇)
MySQL 5.7 MYISAM ENGINE 以下是 MySQL 5.7 MYISAM ENGINE 中的运行结果 mysql> CREATE TABLE tb_test5 ( -> t ...
- SpreadJS + GcExcel 一出,谁与争锋!全栈表格技术轻松应对复杂公式计算场景(一)
设计思路篇 Excel是我们日常办公中最常用的电子表格程序,不仅可满足报表数据的计算需求,还可提供绘图.数据透视分析.BI和Visual Basic for Applications (VBA)宏语言 ...
- Flink学习笔记(详细待补充)
目录 简单入门 Flink安装部署 Standalone模式 Yarn模式 Kubernetes部署 Flink运行架构 运行时四大组件 任务提交流程 任务调度原理 Flink流处理API 执行环境E ...
- centos7 配置 zabbix 3 & apache , nginx 与php, mysql 的交互(基本)
#yum install -y https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-server-mysql-3.0.0 ...
- Java课程设计---学生信息管理系统需求分析及总体设计
按照软件工程实践的原则,开发大型程序需要经历需求分析.总体设计.详细设计.编码实现.系统测试.系统维护等几个阶段. 1.需求分析 本阶段是整个软件开发过程中最重要的环节.通过了解实际运行的系统或与用户 ...
- AHUACM寒假集训I(基础数据结构+串串)
H.超级钢琴 luoguP2048 题目大意: 求出一个长N序列中所有长度在L到R的子序列中序列和最大的K个,并求这K个的和 思路: 暴力的话可以求出所有满足要求的子序列然后排序,然后显然会T. 所以 ...
- maven通用镜像设置
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorO ...
- PDF格式简单分析
上周因需要编辑了下PDF,用了一两个试用软件,感觉文字版的PDF还是挺好编辑的.想要研究一下PDF格式. 0. 站在前辈的肩膀上 从前辈的文章和书籍了解到 PDF文件是一种文本和二进制混排的格式,二进 ...
- Chrome:查看HTTP请求的header信息
1.打开Google浏览器Chrome,通过F12进入开发者工具,进入Network模块下,此时由于我们还没有进行任何HTTP请求,所以这个页面下还是空空如也 2.随便通过某个搜索引擎搜索一下,比如通 ...
- ACM训练,大理石在哪儿?
int p = lower_bound(a, a+num, x) - a; //在已排序数组a中查找大于或等于x的第一个位置 lower_bound( )返回的是一个迭代器,-a相当于减去a的首地址, ...