什么是Java中的Thread的LifeCycle?

时间:2016-04-05 12:06:25

标签: java multithreading lifecycle

在java中创建线程对象时

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

线程t1的生命周期的不同阶段以及执行​​run()后的状态是t1

4 个答案:

答案 0 :(得分:9)

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

enter image description here

Java线程 上面提到的阶段在这里解释:

New:新线程在新状态下开始其生命周期。它一直处于这种状态,直到程序启动线程。它也被称为天生的线程。

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

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

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

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

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

答案 1 :(得分:6)

线程可以是以下State之一:

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

RUNNABLE :在Java虚拟机中执行的线程处于此状态。

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

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以了解此图中的各种状态

enter image description here

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

答案 2 :(得分:0)

线程状态:

  1. 新建 - 已创建但未执行
  2. Runnable - 正在运行
  3. 已终止 - 已达到运行方法范围的结束。
  4. 线程也可以有等待,定时等待和阻止状态

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

答案 3 :(得分:0)

Java线程的生命周期

有5个线程状态

新建-当我们使用new运算符创建新的Thread对象时,线程状态为New Thread。此时,线程还没有激活,它是Java编程内部的状态

Runnable -当我们在Thread对象上调用start()函数时,其状态已更改为Runnable。该控件已分配给线程调度程序以完成其执行。是立即运行此线程还是在运行之前将其保留在可运行线程池中,取决于线程调度程序的操作系统实现

正在运行-线程正在执行时,其状态更改为“正在运行”。线程调度程序从可运行线程池中选择一个线程,并将其状态更改为“正在运行”。然后,CPU开始执行该线程。线程可以将时间从运行状态更改为Runnable,Dead或Blocked,这取决于时间切片,run()方法的线程完成情况或等待某些资源

已阻止/正在等待-一个线程可以等待其他线程完成使用线程连接的过程,也可以等待某些资源可用,然后状态更改为“等待中”。线程等待状态结束后,其状态将更改为“可运行”,然后移回可运行线程池

Dead -线程执行完毕后,其状态将更改为Dead,并且认为该状态不活跃