乐趣区

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

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

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

大家好,我是 Mic,一个工作了 14 年的 Java 程序员。

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

上面来看看高手的答复。

高手:

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

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

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

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

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

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

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

总结

这个问题非常简单。

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

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

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

大家记得点赞珍藏加关注!!!

版权申明:本博客所有文章除特地申明外,均采纳 CC BY-NC-SA 4.0 许可协定。转载请注明来自 Mic 带你学架构
如果本篇文章对您有帮忙,还请帮忙点个关注和赞,您的保持是我一直创作的能源。欢送关注同名微信公众号获取更多技术干货!

退出移动版