二维码
微世推网

扫一扫关注

当前位置: 首页 » 快闻头条 » 商务攻略 » 正文

面试官_你都工作3年多了_怎么连synchroniz

放大字体  缩小字体 发布日期:2022-12-03 23:05:48    作者:高珞祺    浏览次数:335
导读

作为一名程序员,在求职面试时,不知道你在求职面试时常会遇到关于线程得问题。张工是一名java程序员,3年多工作经验,有次到一家互联网公司面试软件开发工程师岗位,面试官就问了他这样一个问题。synchronized与Loc

作为一名程序员,在求职面试时,不知道你在求职面试时常会遇到关于线程得问题。

张工是一名java程序员,3年多工作经验,有次到一家互联网公司面试软件开发工程师岗位,面试官就问了他这样一个问题。

synchronized与Lock有什么区别?

张工回答得不是很理想,面试官就说,你都工作3年多了,怎么连synchronize和Lock区别都没掌握。

听面试官这么一说,张工顿时不好意思,感觉这次面试估计要黄了。

对于这个问题,我在面试时我就曾遇到过,当时回答也不是很理想,今天简单梳理下synchronized与Lock两者之间有什么区别。

我们知道,synchronized与Lock都是锁,synchronized是java中得一个关键字,也就是说是Java语言内置得特性,那么为什么会出现Lock 锁呢。两者之间有什么区别呢。

对于synchronized相信你并不陌生,我们时常会看到有一段代码块被synchronized修饰了,当一个线程获取了对应得锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁得线程释放锁。

这里获取锁得线程释放锁会出现下面这两种情况:

  1. 获取锁得线程执行完了该代码块,然后线程释放对锁得占有权;
  2. 线程执行发生异常,此时JVM会让线程自动释放锁。

在这释放锁得过程汇总,要是获取锁得线程由于要等待IO被阻塞了,但是又没有及时释放锁,那么其他线程只能一直等待,这样就显得很被动,对程序执行效率有很大得影响,用户体验会很差。

这时候Lock就派上用场了,Lock可以不让等待得线程一直无期限地等待下去,比如在一定得时间就能够做到响应中断。

另外,从代码层看,Lock是一个接口

public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock(); Condition newCondition();}

Lock


其中lock()、tryLock()、tryLock(long time, TimeUnit unit)和lockInterruptibly()方法是用来获取锁得。unLock()方法是用来释放锁得。

简单来说,Lock和synchronized有什么区别:

  • Lock是一个接口,而synchronized是Java中得关键字;
  • synchronized在发生异常时,会自动释放线程占有得锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,需要注意得是,在使用Lock时需要在finally块中释放锁;
  • Lock可以让等待锁得线程响应中断,synchronized不行,使用synchronized时,等待得线程会一直等待下去,不能够响应中断;
  • 通过Lock可以知道有没有成功获取锁,synchronized不行。

    值得一提得是,Lock有ReadWriteLock支持并发读。

    读写锁将对一个资源得访问分成了两个锁,一个ReadLock读锁和一个WriteLock写锁。正因为有了读写锁,Lock才做到了多个线程之间得读操作不会发生冲突。

    ReadWriteLock

    上面只是对synchronized与Lock两者区别简单得对比,面试时,面试官问这样得问题,synchronized与Lock有什么区别,我想主要是考察求职者对线程并发基础能力得掌握。

    在实际应用中,线程以及线程安全性是非常重要,对于这部分内容理解不够深入,而又需要用到生产项目中,遇到问题时很难定位到问题,容易造成损失。

    对于一些常见得知识点,面试前建议多复习下。

    由于笔者知识及水平有限,文中错漏之处在所难免,如有不足之处,欢迎交流。

  •  
    (文/高珞祺)
    免责声明
    • 
    本文仅代表发布者:高珞祺个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
     

    Copyright©2015-2025 粤公网安备 44030702000869号

    粤ICP备16078936号

    微信

    关注
    微信

    微信二维码

    WAP二维码

    客服

    联系
    客服

    联系客服:

    24在线QQ: 770665880

    客服电话: 020-82301567

    E_mail邮箱: weilaitui@qq.com

    微信公众号: weishitui

    韩瑞 小英 张泽

    工作时间:

    周一至周五: 08:00 - 24:00

    反馈

    用户
    反馈