【问题标题】:What is the LifeCycle of Thread in Java?Java中线程的生命周期是什么?
【发布时间】:2016-04-05 12:06:25
【问题描述】:

在java中创建线程对象时

Thread t1 = new Thread(Runnable object);
t1.start();

线程t1的生命周期有哪些不同阶段,run()执行后将是t1的状态?

【问题讨论】:

  • 显示没有研究工作:在您选择的搜索引擎中搜索“java 线程生命周期”。
  • 如果您想保留这个问题,我建议您格式化您的代码。否则我会用谷歌搜索“Java Thread 文档”并通读。
  • 线程可以被其他线程中断,所以可能的状态可以是等待、定时等待、睡眠或死亡

标签: java multithreading lifecycle


【解决方案1】:

线程在其生命周期中会经历不同的阶段。例如,一个线程诞生、启动、运行,然后死亡。下图展示了一个线程的完整生命周期。

Java 线程 上述阶段在这里解释:

New: 新线程以新状态开始其生命周期。它一直保持这种状态,直到程序启动线程。它也被称为天生线程。

Runnable:新生成的线程启动后,线程变为可运行的。处于这种状态的线程被认为正在执行它的任务。

Waiting: 有时,一个线程在等待另一个线程执行任务时转换到等待状态。只有当另一个线程向等待线程发出信号继续执行时,一个线程才会转换回可运行状态。

Timed waiting: 可运行线程可以在指定的时间间隔内进入定时等待状态。当该时间间隔到期或它正在等待的事件发生时,处于此状态的线程将转换回可运行状态。

Terminated ( Dead ):可运行线程在完成其任务或以其他方式终止时进入终止状态。

来源:http://www.tutorialspoint.com/java/java_multithreading.htm

【讨论】:

  • RUNNABLE 和 RUNNING 在大多数操作系统中是不同的状态,但java.lang.Thread.State 枚举中没有RUNNING。只有RUNNABLE。处于RUNNABLE 状态的 Java 线程可能实际上正在 CPU 上运行,或者它可能正在等待 CPU 运行,但它没有等待其他任何东西。
  • 那么,根据图形,“等待”线程永远不会再次“运行”?这与我的经验不符……
  • 确保new Thread(); 不创建新线程,它只是创建一个简单的对象。
  • 中断状态如何适应这个?
【解决方案2】:

线程可以在以下State之一中:

NEW :尚未启动的线程处于此状态。

RUNNABLE :Java虚拟机中执行的线程就是这个状态。

BLOCKED:处于阻塞状态的线程正在等待监视器锁进入同步块/方法或在调用Object.wait后重新进入synchronized块/方法。

WAITING: 无限期等待另一个线程执行特定操作的线程处于此状态。

由于调用以下方法之一,线程处于等待状态:

Object.wait with no timeout
Thread.join with no timeout
LockSupport.park

TIMED_WAITING: 一个线程正在等待另一个线程执行一个动作直到指定的等待时间。

由于在指定的正等待时间调用以下方法之一,线程处于定时等待状态:

Thread.sleep
Object.wait with timeout
Thread.join with timeout
LockSupport.parkNanos
LockSupport.parkUntil

TERMINATED:已退出的线程处于此状态。

请参阅 pramodbablad 的 article 以了解此图中的各种状态

在上图中,除了RUNNING(已用圆圈表示)外,所有其他矩形块表示各种thread states

【讨论】:

    【解决方案3】:

    线程状态:

    1. 新建 - 已创建但未执行
    2. 可运行 - 正在运行
    3. 已终止 - 已达到运行方法范围的终点。

    线程也可以有等待、定时等待和阻塞作为状态

    有关更多信息,请参见此处: https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 1970-01-01
      相关资源
      最近更新 更多