线程的生命周期

线程生命周期包含五个关键阶段:新建、可运行、运行、阻塞和死亡。
线程创建后,首先处于新状态,分配JVM内存并初始化变量。
调用start()方法后,线程进入就绪状态,等待CPU配置运行模式。
一旦CPU接收到它,线程就进入运行状态并执行其代码。
阻塞状态是指线程在某些情况下暂时停止执行,可能是由于等待、同步或I/O请求。
当块等待时,线程在等待队列中;当阻塞是同步时,它等待阻塞对象;线程的结束状态包括正常结束、异常结束、使用stop方法的中断(不推荐)、使用interrupt方法的中断。
序列的正常结束通常在程序结束时自动完成,或者在运行模式中控制退出标志。
例如,可以设置一个飞行标志来指示线程是否已关闭。
当使用interrupt()方法时,有两种情况:用户中断或系统中断。
但是,直接调用end()方法终止线程是危险的,可能会导致数据不一致和线程安全问题。
在更深层次的理解中,我们还要区分sleep和wait的区别:前者是线程主动坚持的时候,而后者是线程在等待某种情况的时候;就是start()会创建一个新线程并执行run()方法,而run()方法通常是直接在主线程上调用的。
此外,包含正在运行的线程(守护线程)也很重要。

总算把线程六种状态的转换说清楚了!

线程的生命周期包括六种主要状态:新建、运行、阻塞、等待、定时等待和完成。
线程在任何给定时间只能处于一种状态。
我们可以使用getState()方法获取线程的当前状态。
理解状态转换对于编程和理解多线程至关重要。
流状态之间的转换主要包括阻塞状态、等待状态和定时等待状态。
当线程正在等待同步监视锁(例如“同步”块)并通过“LockSupport.park()”方法进入时,就会出现“阻塞”状态。
对于其他锁(例如ReentrantLock),当线程没有获取锁时,它会立即进入等待状态。
当线程在等待一定时间后无法执行时,就会出现TimedWaiting条件。
它与Waiting状态的区别在于后者等待唤醒,而TimedWaiting状态在指定时间过后自动结束。
线程从阻塞状态转变为运行状态,必须获取锁。
线程使用notify()方法被唤醒后,首先进入Blocked状态,然后尝试获取锁。
锁。
如果成功,则转换为“Runnable”状态。
从“等待”状态到“运行”状态,必须使用“notify()”或其他适当的机制来唤醒线程。
有两种方式进入终止状态(“Completed”):线程已完成执行或异常终止。
摘要:研究流状态转换的重点是理解状态之间的逻辑流以及触发状态转换的条件。
遵循正确的逻辑并理解状态之间的交互将有助于您编写高效稳定的多线程程序。