java面试题lock和synchronized有什么区别?(代码片段)

黑马程序员官方 黑马程序员官方     2023-03-09     305

关键词:

学习目标:

掌握 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)有什么优势?如果让你实现一个高性能缓存... 查看详情