• 凯发官网手机app,凯发首页

    教育行业A股IPO第一股(股票代码 003032)

    全国咨询/投诉热线:400-618-4000

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

    更新时间:2022年01月10日17时24分 来源:传智教育 浏览次数:

    目标

    掌握 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培训之java难点解析(十五)-Lock接口

    Synchronized原理是什么?Synchronized原理详解

    Java视频教程之synchronized原理剖析与优化

    传智教育java开发培训

    0 分享到:
    和我们在线交谈!
    凯发官网手机app