当前位置: 首页 > Web前端 > HTML

【Java面试】如果一个线程两次调用start(),会发生什么?

时间:2023-03-29 12:58:26 HTML

"如果一个线程两次调用start(),会发生什么?"如果这个问题来自阿里p6帖子的第一页,你能回答吗?关于这个问题,涉及到线程的生命周期,我把完整的答案整理成了15W字的面试文档。可以私信我领取。一起来看看大师的解答吧。高手:在Java中,一个线程只能调用一次start()方法,第二次调用会抛出IllegalThreadStateException。线程本身有一个生命周期。在Java中,一个线程的生命周期包括6种状态。NEW,线程被创建并且还没有调用start来启动RUNNABLE。该状态的线程可能正在运行,也可能正在等待操作系统在就绪队列中调度分配CPU资源。BLOCKED,线程处于锁等待状态WAITING,表示线程处于条件等待状态,当有条件触发时唤醒,比如wait/notify。TIMED_WAIT和WAITING一样,只不过它多了一个超时条件触发TERMINATED,也就是线程执行结束。当我们第一次调用start()方法时,线程的状态可能是terminated,也可能是其他非NEW状态的状态。再次调用start()相当于重新运行正在运行的线程,无论从线程安全还是线程本身的执行逻辑来看都是不合理的。所以为了避免这个问题,在线程运行的时候会先判断当前线程的运行状态。总结这个问题很简单。它通常用作面试过程中的热身问题。大家只需要回答异常信息即可。深入理解线程对我们日常的开发工作和问题诊断有很大的帮助。