美文网首页
lock和synchronized有什么区别?【java面试题】

lock和synchronized有什么区别?【java面试题】

作者: 鹤子青云上 | 来源:发表于2023-03-22 16:43 被阅读0次

目标
掌握 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 的内部结构

相关文章

  • 面试题集锦

    java基础面试题 每日一问(一)Lock和synchronized的区别[https://www.jianshu...

  • Java中的锁——Lock和synchronized

    一、Lock接口 1、Lock接口和synchronized内置锁 a)synchronized:Java提供的内...

  • 笔记

    java中有哪几种锁? 1.有synchronized和lock两种锁,synchronized是java的...

  • Lock锁

    synchronized 锁和 Lock 锁的区别 Lock 锁,Java类,synchronized,关键字。s...

  • 2019-09-26

    synchronized和lock Lock是Java 5以后引入的新的API,和关键字synchronized相...

  • 高并发篇

    高并发篇 java锁有那些 synchronized和lock的区别 synchronized的类锁和对象锁的区别...

  • java面试知识总结---并发知识

    目标 记识java并发,valatile和synchronized区别,lock和synchronized区别 1...

  • 死磕Java——Lock锁

    一、死磕Java——Lock锁 首先,知道的是Java中加锁的方式有两种,分别是synchronized和Lock...

  • synchronized和lock的区别(底层实现)

    从使用的角度看 synchronized 和 lock 的区别 起初 java 中只有 synchronized ...

  • Java并发编程显式锁

    显式锁 有了 synchronized 为什么还要 Lock? Java 程序是靠 synchronized 关键...

网友评论

      本文标题:lock和synchronized有什么区别?【java面试题】

      本文链接:https://www.haomeiwen.com/subject/ticbrdtx.html