关于前端:Java面试如果一个线程两次调用start会出现什么问题

“如果一个线程两次调用start(),会呈现什么问题?”

如果这个问题出自阿里p6岗位第一面的发问,你能答复进去吗?

对于这个问题,波及到线程的生命周期,我把残缺的答复整顿到了15W字的面试文档外面大家能够私信我支付。

上面来看看高手的答复。

高手:

在Java外面,一个线程只能调用一次start()办法,第二次调用会抛出IllegalThreadStateException。

一个线程自身是具备一个生命周期的。

在Java外面,线程的生命周期包含6种状态。

  • NEW,线程被创立还没有调用start启动
  • RUNNABLE,在这个状态下的线程有可能是正在运行,也可能是在就绪队列外面期待操作系统进行调度调配CPU资源。
  • BLOCKED,线程处于锁期待状态
  • WAITING,示意线程处于条件期待状态,当触发条件后唤醒,比方wait/notify。
  • TIMED_WAIT,和WAITING状态雷同,只是它多了一个超时条件触发
  • TERMINATED,示意线程执行完结

当咱们第一次调用start()办法的时候,线程的状态可能处于终止或者非NEW状态下的其余状态。

再调用一次start(),相当于让这个正在运行的线程从新运行,不论从线程的安全性角度,还是从线程自身的执行逻辑,都是不合理的。

因而为了防止这个问题,在线程运行的时候会先判断以后线程的运行状态。

总结

这个问题非常简单。

在面试过程中个别是作为热身题目呈现。

大家只须要答复出那个异样信息就行了。

深度了解线程,对咱们的日常开发工作以及问题诊断工作,都十分有帮忙。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据