"如果一个线程两次调用start(),会发生什么?"如果这个问题来自阿里p6帖子的第一页,你能回答吗?大家好,我是Mic,一名拥有14年经验的Java程序员。关于这个问题,涉及到线程的生命周期,我把完整的答案整理成了15W字的面试文档。可以私信我领取。一起来看看大师的解答吧。高手:在Java中,一个线程只能调用一次start()方法,第二次调用会抛出IllegalThreadStateException。线程本身有一个生命周期。在Java中,一个线程的生命周期包括6种状态。NEW,线程被创建并且还没有调用start来启动RUNNABLE。该状态的线程可能正在运行,也可能正在等待操作系统在就绪队列中调度分配CPU资源。BLOCKED,线程处于锁等待状态WAITING,表示线程处于条件等待状态,当有条件触发时唤醒,比如wait/notify。TIMED_WAIT和WAITING一样,只不过它多了一个超时条件触发TERMINATED,也就是线程执行结束。当我们第一次调用start()方法时,线程的状态可能是terminated,也可能是其他非NEW状态的状态。再次调用start()相当于重新运行正在运行的线程,无论从线程安全还是线程本身的执行逻辑来看都是不合理的。所以为了避免这个问题,在线程运行的时候会先判断当前线程的运行状态。总结这个问题很简单。它通常用作面试过程中的热身问题。大家只需要回答异常信息即可。深入理解线程对我们日常的开发工作和问题诊断有很大的帮助。大家记得点赞收藏关注哦!!!版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!
