Java线程状态总结
- NEW:这是线程被创建但尚未启动的状态。例如,当你使用new Thread()创建了一个线程对象,但还没有调用start()方法时,线程处于NEW状态。
- RUNNABLE:一旦调用了线程对象的start()方法,线程就从NEW状态转换到RUNNABLE状态。在RUNNABLE状态,线程有可能正在执行,也有可能正在等待CPU资源(即等待CPU调度)
- BLOCKED:当一个线程试图获取一个对象的锁,而这个锁正被其他线程持有时,该线程就会进入BLOCKED状态。例如,使用synchronized关键字修饰的方法或代码块。
- WAITING:线程执行到Object.wait()方法、不带超时的Thread.join()或LockSupport.park()时,会进入WAITING状态。这些方法会让线程无限期地等待,直到其他线程调用相应的notify()或notifyAll()方法。
- TIMED_WAITING:线程执行到带超时的Thread.sleep(millis)、带超时的Object.wait(timeout)、带超时的Thread.join(timeout)或带超时的LockSupport.parkNanos()、LockSupport.parkUntil(deadline)时,会进入TIMED_WAITING状态。这些方法让线程等待一段时间,如果在等待期间被中断或时间到了,线程会从这种状态转换出来。
- TERMINATED:当线程的run方法执行完毕或因未捕获的异常而异常终止时,线程会进入TERMINATED状态。一旦线程终止,就不能再启动它。
Java编程原理 文章被收录于专栏
知其然知其所以然,只有了解了底层原理,借助第一性原理,才可以运用自如,成为真大师。 什么是第一性原理? 第一性原理最早由亚里士多德提出,他将其定义为:“事物被已知的第一项前提。” 简单来说,它要求你不要用“类比”去思考(即:因为别人这样做,或者以前这样做,所以我也这样做),克服从众心理(FOMO)和经验偏差,在科技创新、商业决策中找到成本与效率的最优解。