Hi,大家好,我是Mic,一个工作了14年的程序员和创业者 。
一个在北京工作了3年的粉丝,在一个公司待了3年没有跳槽 。
而且他在现在公司里面担任一个核心开发,自认为能力还不错,想出去找一份高薪工作 。
结果去面试的时候被一道简单的问题难住了,面试官问他:“线程状态BLOCKED和WAITING有什么区别”!
因为平时主要是做业务开发,所以线程这方面的研究很少,最后很遗憾没有通过面试 。
下面看看普通人和高手对这个问题的回答 。
需要高手面试文档(附赠阿里内部十万字面试文档)或者有不懂的技术面试题想咨询的小伙伴可以后台私信【Mic】或者评论区留言
普通人:BLOCKED是线程,是一个阻塞状态嘛 。然后WAITING是线程是等待状态 。
区别就是阻塞是被动的,然后WAITING是一个条件的一个触发就是我们更多的是在就人工为主动的去触发线程的一种头等待的一个状态,所以我认为它们区别一个是在被动和主动的一个区别吧 。
高手:好的,面试官 。
BLOCKED和WAITING都是属于线程的阻塞等待状态 。
BLOCKED状态是指线程在等待监视器锁的时候的阻塞状态 。
也就是在多个线程去竞争Synchronized同步锁的时候,没有竞争到锁资源的线程,会被阻塞等待,这个时候线程状态就是BLOCKED 。
在线程的整个生命周期里面,只有Synchronized同步锁等待才会存在这个状态 。
文章插图
【「Java面试」线程状态,BLOCKED和WAITING有什么区别】WAITING状态,表示线程的等待状态,在这种状态下,线程需要等待某个线程的特定操作才会被唤醒 。我们可以使用Object.wait()、Object.join()、LockSupport.park()这些方法
使得线程进入到WAITING状态,在这个状态下,必须要等待特定的方法来唤醒,
比如Object.notify方法可以唤醒Object.wait()方法阻塞的线程
LockSupport.unpark()可以唤醒LockSupport.park()方法阻塞的线程 。
所以,在我看来,BLOCKED和WAITING两个状态最大的区别有两个:
- BLOCKED是锁竞争失败后被被动触发的状态,WAITING是人为的主动触发的状态
- BLCKED的唤醒时自动触发的,而WAITING状态是必须要通过特定的方法来主动唤醒
总结线程的生命周期以及在JAVA里面有哪些方式导致线程声明周期的变化 。
是非常重要的基础知识,因为在应用里面一定会用到线程,而一旦线程出现故障,
我们就需要根据线程的dump日志去定位,而了解线程的运行状态就能快速去定位具体的问题 。
大家记得点赞收藏加关注 。
推荐阅读
- 原生javascript解锁恶心的CSDN强制关注才能阅读让文章自动展开
- 如何正确使用SWOT做分析?「完全干货」
- 00后|如何在面试时解释“空窗期”?答案在这里!
- 为什么想应聘文员,面试官问你为什么不做销售想做文员-
- 每个省教资面试通过率,教资考试面试通过率是多少-
- 求职|接到面试通知后,应该重点做两个准备工作
- |在面试中,为什么偏偏是那些比你差劲的人被聘用了!!!???
- 医生|一单位开启扩招,工资6500起还带有编制,某些岗位只需通过面试即可
- 猫的那个动画片叫什么,什么猫的动画片名字叫什么-
- 生肖|985名校博士生面试被拒,原因让人不解,网友:高考定终身