2016-04-05 18 views
-2

在java中当我们创建线程什么是Java中Thread的生命周期?

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

的目标是什么的线程t1的和run()执行后的生命周期的不同阶段将是t1状态?

+0

显示没有研究成果:在您选择的搜索引擎中搜索“java线程生命周期”。 –

+0

如果你想让这个问题开放,我会推荐格式化你的代码。否则,我会谷歌“Java线程文件”并通读。 – Stormie

+0

https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html –

回答

8

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

enter image description here

Java线程 上面提到的阶段进行了说明:

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

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

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

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

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

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

+2

在大多数操作系统中,RUNNABLE和RUNNING是不同的状态,但java.lang.Thread.State中没有'RUNNING'。只有'RUNNABLE'。处于RUNNABLE状态的Java线程可能实际上是在CPU上运行,或者它可能正在等待CPU运行,但不会等待其他任何事情。 –

+0

因此,根据图形,“等待”线程永远不会再次变为“运行”?这不符合我的经验... – Holger

+0

确保'新线程();'不创建新线程它只是创建一个简单的对象。 – UnKnown

5

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

NEW :还没有开始就处于这种状态的线程。

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

BLOCKED:处于阻塞状态的线程正在等待监视器锁定,以便在调用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:已退出的线程处于这种状态。

请参阅本article通过pramodbablad理解各种状态该图

enter image description here

在上述图中,除了RUNNING(其已经在一个圆圈被示出)中,所有其它的矩形块表示各种thread states

相关问题