关键词:
学习目标:
掌握 lock 与 synchronized 的区别 理解 ReentrantLock 的公平、非公平锁 理解 ReentrantLock 中的条件变量 lock 与 synchronized 的区别有三个层面学习内容:
1.不同点
语法层面
-
synchronized 是关键字,源码在 jvm 中,用 c++ 语言实现
-
Lock 是接口,源码由 jdk 提供,用 java 语言实现
-
使用 synchronized 时,退出同步代码块锁会自动释放,而使用 Lock 时,需要手动调用 unlock 方法释放锁
2.功能层面
-
二者均属于悲观锁、都具备基本的互斥、同步、锁重入功能
-
Lock 提供了许多 synchronized 不具备的功能,例如获取等待状态、公平锁、可打断、可超时、多条件变量
-
Lock 有适合不同场景的实现,如 ReentrantLock, ReentrantReadWriteLock
3.性能层面
-
在没有竞争时,synchronized 做了很多优化,如偏向锁、轻量级锁,性能不赖
-
在竞争激烈时,Lock 的实现通常会提供更好的性能
4.公平锁
公平锁的公平体现
已经处在阻塞队列**中的线程(不考虑超时)始终都是公平的,先进先出
公平锁是指未处于阻塞队列中的线程来争抢锁,如果队列不为空,则老实到队尾等待
非公平锁是指未处于阻塞队列中的线程来争抢锁,与队列头唤醒的线程去竞争,谁抢到算谁的
公平锁会降低吞吐量,一般不用
5.条件变量
-
ReentrantLock 中的条件变量功能类似于普通 synchronized 的 wait,notify,用在当线程获得锁后,发现条件不满足时,临时等待的链表结构
-
与 synchronized 的等待集合不同之处在于,ReentrantLock 中的条件变量可以有多个,可以实现更精细的等待、唤醒控制
代码说明
day02.TestReentrantLock 用较为形象的方式演示
ReentrantLock 的内部结构
学习产出:
<font color=#999AAA
代码说明
day02.TestReentrantLock 用较为形象的方式演示
ReentrantLock 的内部结构
java中级面试题
...者Runtime.gc(),但是没有办法保证GC的执行。 三:Synchronized和lock有什么区别?1、 首先synchronized是Java内置关键字,在JVM层面,Lock是个Java类;2、 synchronized可以给类、方法、代码块加锁;而lock只能给代... 查看详情
java并发编程面试题
...latile内存语义,什么时候用,用的时候需要考虑什么问题synchronized内存语义,什么时候用,和锁比较一下优缺点synchronized中涉及的锁升级流程锁的内存语义,举例说明,加锁失败时候的处理流程比较下CAS、volatile、synchronized、Lock... 查看详情
面试题12月28-积累篇(代码片段)
1、简述synchroized和java.util.concurrent.locks.Lock的异同?1.synchronized用在方法和代码块的区别?a.可以只对需要同步的使用b.与wait(),notify()和notifyall()方法使用比较方便2.wait()a。释放持有的对象锁,线程进入等待池,释放cpu... 查看详情
java面试题及答案2020,java面试题汇总,java最新面试题及答案2020四
...语句中加入Lock关键字和内存屏障。Lock实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题。用sychronized修饰的方法或者语句块在代码执行完之后锁自动释放,而用Lock需要我... 查看详情
简述synchronized和java.util.concurrent.locks.lock的异同?
主要相同点:Lock能完成synchronized所实现的所有功能。主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能... 查看详情
lock和synchronized比较详解(转)
...问,那就是Lock。 也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchronized的缺陷讲起,然后再讲述java.util.concurrent.locks包下常用的有哪些类... 查看详情
java开发环境!java数据库连接池面试题
...ConcurrentHashMap,以及各自优劣势Java如何实现线程安全Synchronized和Lock哪个更好?HashMap中的get()方法是如何实现的?HashMap可以用在哪些场景?JVM,垃圾回收 查看详情
java开发师笔试面试每日12题
1.Volatile和Synchronized不同点 (1)、volatile只能作用于变量,使用范围较小。synchronized可以用在变量、方法、类、同步代码块等,使用范围比较广。 (2)、volatile只能保证可见性和有序性,不能保证原子性。而可见性、有序性、原... 查看详情
2020年最鲜出炉一线互联网公司java高级面试题总结(含解析)(代码片段)
...分享Java重点面试知识:多线程(线程状态、线程并发,Synchronized与Lock的区别和底层原理,常用的锁及其使用场景和原理,volatile和ThreadLocal解决了什么问题,CAS在Java中的实现线程池原理和实现,阻塞队列和线程安全队列,线程... 查看详情
lock和synchronized的同步区别与选择
1.lock是一个接口,而synchronized是java的一个关键字,synchronized是内置的语言实现;(具体实现上的区别在《Java虚拟机》中有讲解底层的CAS不同,以前有读过现在又遗忘了。)2.synchronized在发生异常时候会自动释放占有的锁,因此... 查看详情
java面试03|并发及锁
1、synchronized与Lock的区别 使用synchronized这个关键字实现的同步块有一些缺点: (1)锁只有一种类型 (2)线程得到锁或者阻塞 (3)Lock是在Java语言层面基于CAS自旋方式来实现锁的,在并发条件下,... 查看详情
java面试经历汇总
...数3.JAVA基础,equals和==4.多线程方式、threadlocal,各种锁,synchronized和lock5.设计模式、spring类加载方式、实例保存在哪、aopioc、反射机制6、类加载器,双亲委派模型,热部署6.jvm内存模型,内存结构、堆的分代算法、堆的分区、gc... 查看详情
java面试总结
...set等几种类型的区别 wait()和sleep的区别java的锁: synchronized的几种情况 ReentrantLock synchronized和lock的区别 查看详情
java开发面试题整理(2019春招)(代码片段)
...楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。HashMap是非sy... 查看详情
简述synchronized和java.util.concurrent.locks.lock的异同?
简述synchronized和java.util.concurrent.locks.Lock的异同? 解答: 主要相同点:Lock能完成synchronized所实现的所有功能主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员... 查看详情
java面试41-45|并发及锁
41、synchronized与Lock的区别 使用synchronized这个关键字实现的同步块有一些缺点: (1)锁只有一种类型 (2)线程得到锁或者阻塞 (3)Lock是在Java语言层面基于CAS自旋方式来实现锁的,在并发条件下,其性能要... 查看详情
深入研究javasynchronize和lock的区别与用法
一、synchronized和lock的用法区别synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。lock:需要显示指定起始位置和终止位置。一般使用ReentrantLock类做为锁... 查看详情
java并发编程-多线程/并发面试题集合(持续更新)(代码片段)
1.现在有线程T1、T2和T3。你如何确保T2线程在T1之后执行,并且T3线程在T2之后执行。https://www.cnblogs.com/helios-fz/p/11216925.html 2. Java中新的Lock接口相对于同步代码块(synchronizedblock)有什么优势?如果让你实现一个高性能缓存... 查看详情