首页 理论教育 线程状态:生命周期、行为和死亡方式

线程状态:生命周期、行为和死亡方式

更新时间:2025-01-19 工作计划 版权反馈
【摘要】:一个线程有自己的完整的生命周期,通常要经历新生、就绪、运行、阻塞和死亡五种状态。线程的行为完全依赖于线程所处的状态。第一种方法是线程死亡最普通的方式。

每个Java程序都有一个默认的主线程。对于独立应用程序,主线程是main()方法执行的线程。对于Applet,主线程指挥浏览器加载并执行Applet。要实现多线程,必须在主线程中创建新的线程对象。一个线程有自己的完整的生命周期,通常要经历新生、就绪、运行、阻塞和死亡五种状态。线程的行为完全依赖于线程所处的状态。

1.新生状态,即New状态

当用new关键词和线程类的构造方法创建了一个线程对象,但未调用start()方法时,线程处于new新生状态。此时,它已经有了相应的内存空间,并已被初始化。

2.就绪状态,即Runnable状态

对于新创建的线程,调用start()方法后,会自动调用run()方法。这时,线程进入Runnable状态。这时线程具备了运行的条件,但尚未分配到CPU资源,因此它进入线程队列按线程的“优先”级别排队,等待系统为它分配CPU。

3.运行状态,即Running状态

一旦线程获得了CPU资源,该线程才进入运行状态。这时,线程执行自己run()方法中代码。直到有其他命令终止run()方法的执行。

4.阻塞状态,即Not Running状态

由于某些原因,线程被临时暂停,则进入Not Running状态。处于这种状态的线程对于用户而言仍然有效,仍然可以重新进入Runnable状态。以下几种事件会造成线程被临时暂停:

●调用sleep()方法。

●调用wait()方法。(www.xing528.com)

●线程由于I/O而阻塞(block)。

以下事件会让线程重新进入Runnable状态:

●当线程sleep或sleep()方法所指定的时间已过去。

●如果线程处于等待(waiting),拥有条件变量的对象调用了notify()或notifyAll()方法。

●如果线程由于I/O而阻塞,I/O操作完成。

5.死亡状态,即Dead状态

当线程不再需要时,则进入“dead”状态。死亡的线程不能再恢复和执行。让线程进入Dead状态可以有以下两种方法:

1)用run()方法执行结束。

2)调用stop()方法(Java2已不鼓励使用)。

第一种方法是线程死亡最普通的方式。当run()方法运行结束引起线程的自然死亡,调用stop()方法,是以异步的方式杀死线程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈