美文网首页
java多线程,java线程的生命周期有多长?

java多线程,java线程的生命周期有多长?

作者: alcohol和cat | 来源:发表于2019-08-20 23:20 被阅读0次

    任何时间点的Java中的线程都存在于以下任何一种状态中。线程在任何时刻仅处于所示状态之一:

    New

    Runnable

    Blocked

    Waiting

    Timed Waiting

    Terminated

    下图显示了任何时刻线程的各种状态。

    线程的生命周期

    新线程:创建新线程时,它处于新状态。当线程处于此状态时,线程尚未开始运行。当一个线程处于新状态时,它的代码尚未运行且尚未开始执行。

    可运行状态准备运行的线程被移动到可运行状态。在这种状态下,线程可能实际上正在运行,或者它可能在任何时刻都准备好运行。线程调度程序负责为线程提供运行时间。

    多线程程序为每个单独的线程分配固定的时间量。每个线程都会运行一段时间,然后暂停并放弃CPU到另一个线程,这样其他线程就有机会运行。发生这种情况时,所有准备运行的等待CPU和当前运行的线程的线程都处于runnable状态。

    阻止/等待状态:当线程暂时处于非活动状态时,它处于以下状态之一:

    阻止

    等候

    例如,当线程正在等待I / O完成时,它处于阻塞状态。线程调度程序负责重新激活和计划阻塞/等待线程。处于此状态的线程无法继续执行,直到它被移动到可运行状态。这些状态中的任何线程都不消耗任何CPU周期。

    当一个线程试图访问当前被某个其他线程锁定的受保护代码段时,它处于阻塞状态。当受保护的部分被解锁时,该计划选择被阻止该部分的一个线程并将其移动到可运行状态。然而,当线程在某个条件上等待另一个线程时,它处于等待状态。满足此条件时,将通知调度程序并将等待线程移至可运行状态。

    如果当前正在运行的线程被移动到阻塞/等待状态,则线程调度程序将调度处于可运行状态的另一个线程以运行。线程调度程序负责确定要运行的线程。

    定时等待:线程在调用具有超时参数的方法时处于定时等待状态。线程处于此状态,直到超时完成或收到通知为止。例如,当线程调用sleep或条件等待时,它将被移动到定时等待状态。

    终止状态:由于以下原因之一,线程终止:

    因为它存在正常。当线程代码完全由程序执行时会发生这种情况。

    因为发生了一些不寻常的错误事件,如分段错误或未处理的异常。

    处于已终止状态的线程不再消耗任何CPU周期。

    相关文章

      网友评论

          本文标题:java多线程,java线程的生命周期有多长?

          本文链接:https://www.haomeiwen.com/subject/xhjbjctx.html