`

线程对象的生命周期

 
阅读更多
线程对象的生命周期
1.Thread.State类声明的线程状态
Thread.State 是Thread类的内部枚举类,其中声明6种线程状态,声明如下:
public class Thread extends Object implements Runnable{
	public static enum Thread.State extends Enum<Thread.State>{
		public  static final Thread.State NEW             //新建态,已创建未启动
		public  static final Thread.State RUNNABLE        //运行态,正在执行
		public  static final Thread.State BLOCKED         //阻塞态,等待监控锁
		public  static final Thread.State WAITING         //等待态,等待时间不确定
		public  static final Thread.State TIMED_WAITING   //等待态,等待时间确定
		public  static final Thread.State TERMINATED      //终止态 	
	} 
	public State getState()   //返回线程的当前状态
}

线程状态说明如下:
(1)新建态
       new Thread()创建的线程对象处于新建态NEW,系统没有为它分配资源。
(2)运行态
       从操作系统角度看,处于新建态的线程启动后,进入就绪态,再由操作系统调度执行而成为运行态。由于线程调度由操作系统控制和管理,程序无法控制,无法区分就绪态或运行态。所以,从程序设计角度看,线程启动后即进入运行态RUNNABLE。进入运行态的线程,执行其run()方法。
(3)阻塞态和等待状态
       一个运行态的线程因某种原因不能继续运行时,进入阻塞态(BLOCKED)或等待态。处于阻塞态或等待态的线程不能执行,即使处理器空闲也不能执行。只有当引起阻塞的原因消除,或等待条件满足时,线程再转入运行态,重新进入线程队列排队等待运行,再次运行时将从暂停处继续运行。
      导致线程进入阻塞态或等待态的原因有多种,如输入/输出、等待消息、睡眠、锁定等。等待态有两种WAITING和TIMED_WAITING,WAITING等待时间不确定,TIMED_WAITING等待时间确定。
(4)终止态
    线程对象停止运行未被撤销时是终止态(TERMINATED)。导致线程终止有两种情况:运行结束或被强行停止。当线程的run()方法执行结束时,该线程进入终止态,等待系统撤销对象所占用的资源;当进程因故停止运行时,该进程中的所有线程将被强行终止。
2.Thread类中改变和判断线程状态的方法
    Thread类中定义start()、sleep()、interrupt()等多个改变线程状态的方法,以及isAlive()、isInterrupted()等判断线程状态的方法。Java线程对象的状态及状态变化如下图:


(1)线程启动
    start()方法启动已创建的线程对象,isAlive()方法判断线程是否活动状态,声明如下:
      public void start()  //启动已创建的线程对象
      public final boolean isAlive()   //判断线程是否活动状态
只有处于新建态的线程对象才能调用start()方法启动,一个线程只能启动一次,如果一个已启动的线程对象再次调用start()方法,则Java抛出IllegalThreadStateException异常。
    当一个线程已启动且未被终止时,isAlive()方法返回true,此时该线程处于运行态、阻塞态、等待态之一,不能做进一步分辨;当一个线程未启动或已终止时,isAlive()方法返回false.
(2)线程睡眠
    sleep()方法使当前线程停止执行若干毫秒,线程由运行态进入等待态,睡眠时间到时线程可再次进入运行态。sleep()方法声明如下,参数millis指定睡眠毫秒数。
  public static void sleep(long millis) throws InterruptedException
(3)线程中断
   interrupt()方法对当前线程设置运行中断标记,与之配合使用的还有两个判断线程是否中断的方法,声明如下:
     public void interrupt()  //设置当前线程对象运行中断标记
     public  boolean isInterrupt() //判断线程是否中断
interrupt()方法为当前线程设置一个中断标记,以便于run()方法运行时使用isInterrupted()方法能够检测到,此时,线程在sleep()之类的方法中被阻塞时,由sleep()方法抛出一个InterruptedException异常,捕获这个异常进行中断处理操作。
      注意:interrupt()方法只是为线程设置了一个中断标记,并没有中断线程运行,该方法没有抛出异常。一个线程在被设置了中断标记之后仍可运行,isAlive()返回true。实例方法isInterrupted()测试线程对象的中断标记,并不清除中断标记。
       当抛出一个InterruptedException异常时,记录该线程中断情况的标记将会被清除,这样再调用isInterrupted()返回false。

  • 大小: 26.9 KB
分享到:
评论

相关推荐

    Java多线程(二)、线程的生命周期和状态控制

    ### Java多线程之线程的生命周期和状态控制 #### 一、线程的生命周期 在Java中,线程的生命周期是指线程从创建到结束的整个过程。根据线程的状态变化,我们可以将线程的生命周期划分为以下几个阶段: 1. **新建...

    浅析Java语言中线程的生命周期及实现方式.pdf

    新建阶段是指创建一个新的线程对象,但还没有启动。就绪阶段是指线程已经被创建,但还没有被执行。运行阶段是指线程正在被执行。阻塞阶段是指线程被阻塞,不能继续执行。死亡阶段是指线程已经执行完毕或被终止。 ...

    Java多线程-线程的生命周期

    当通过`new Thread()`创建一个线程对象时,线程处于新建状态。此时,它只是一个普通的Java对象,尚未开始执行任何线程任务。要使线程开始运行,需要调用`start()`方法。 2. 就绪(Runnable): 调用`start()`方法后...

    线程的生命周期.pdf

    Java线程的生命周期是编程中一个关键的概念,尤其是在多线程编程中。线程的生命周期主要包括以下几个阶段: 1. **创建**:线程的创建可以通过两种方式:直接实例化Thread类或者继承Thread类并重写run()方法。例如,...

    4初学Java多线程:线程的生命周期.pdf

    在探讨Java多线程和线程生命周期时,我们首先应该明确,Java多线程是Java语言支持并发编程的一个重要特性,其允许同时执行多个任务,以提高程序的执行效率和改善用户体验。Java中的每个线程都有自己的生命周期,由一...

    430.428.JAVA基础教程_多线程-线程的生命周期(430).rar

    当我们使用`Thread`类创建一个新的线程对象时,线程处于新建状态。例如,通过`new Thread()`构造函数创建线程。此时,线程尚未启动,只是在内存中占有了一个位置。 2. **就绪状态**(Runnable): 使用`start()`...

    JVM中对象的生命周期

    在Java虚拟机(JVM)中,对象的生命周期包含了多个阶段,这些阶段共同决定了一个对象从诞生到消亡的过程。以下是这些阶段的详细介绍: **创建阶段(Creation)** 在这个阶段,对象从无到有,主要经历以下几个步骤:...

    Java 线程的生命周期完整实例分析

    Java 线程的生命周期完整实例分析 Java 线程的生命周期是指线程从创建到销毁的整个过程。Java 中的线程生命周期主要包括以下几个阶段:新建(New)、可运行(Runnable)、运行(Running)、等待(Waiting)、阻塞...

    Java多线程初学者指南:线程的生命周期.pdf

    当使用`Thread`类创建一个线程对象时,线程处于新建状态。例如,在示例代码中创建了`LifeCycle`类的一个实例`thread1`,此时线程还没有开始执行,`isAlive()`方法返回`false`。 2. **就绪(Runnable)**: 当调用...

    TAO对象生命周期服务.rar_TAO_TAO COR_corba_lifecycle

    《深入理解TAO对象生命周期服务:基于CORBA的实践解析》 在分布式计算环境中,CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)作为一种标准,为跨平台的对象间交互提供了强大的支持...

    Java 线程的生命周期详细介绍及实例代码

    1. **新建状态 (New)**:当通过`new Thread()`创建一个新的线程对象时,线程处于新建状态。此时,线程尚未启动,需要调用`start()`方法才能将线程放入就绪队列。 2. **就绪状态 (Runnable)**:当调用了线程的`start...

    图解Java线程的生命周期

    当通过`Thread`类创建一个新的线程对象时,它处于新建状态。此时,线程尚未启动,只是存在于内存中。要启动线程,必须调用`start()`方法,这将触发`run()`方法的执行。 2. 就绪(Runnable): 调用`start()`方法后...

    Java线程生命周期.zip

    1. **新建(New)**:当通过`Thread`类的构造函数创建一个线程对象时,线程处于新建状态。此时,线程尚未启动,只是内存中存在了一个线程实例。 2. **可运行(Runnable)**:当调用线程的`start()`方法后,线程进入...

    浅谈Java线程的生命周期——北大青鸟佳音旗舰.docx

    本文将深入探讨Java线程的生命周期,包括创建、启动、结束以及线程的协作和调度。 首先,创建Java线程有两种主要方式:直接实例化`Thread`类或者创建一个新的类去继承`Thread`类并重写`run()`方法。例如,你可以...

    Java软件开发实战 Java基础与案例开发详解 12-2 线程的生命周期 共10页.pdf

    ### Java软件开发实战:线程的生命周期 #### 线程生命周期的概念 在Java软件开发过程中,线程是实现并发的重要手段之一。了解线程的生命周期对于有效地管理和控制线程至关重要。线程从创建到销毁的过程可以分为多...

    (完整版)Java程序设计任务驱动式教程-任务二十八-线程的生命周期与优先级(线程的状态与调度).ppt

    1. **新建状态**:当使用`new Thread()`创建一个线程对象时,线程处于新建状态。此时,线程尚未开始执行。 2. **就绪状态**:当线程调用了`start()`方法,线程进入就绪队列等待JVM分配CPU时间片,准备执行。 3. **...

    Java线程的生命周期和状态控制_动力节点Java学院整理

    "Java线程的生命周期和状态控制" Java线程的生命周期是指从线程创建到线程结束的整个过程,而状态控制是指线程在不同的状态之间的转换。Java线程的生命周期主要包括五个状态:新建状态、就绪状态、运行状态、阻塞...

    Java线程的生命周期和状态控制[定义].pdf

    Java线程的生命周期和状态控制是Java多线程编程中的核心概念。线程的状态转换是理解线程行为的关键,这包括新建状态、就绪状态、运行状态、阻塞状态和死亡状态。 1. 新建状态:当使用`new`关键字创建了一个`Thread`...

    Java对象生命周期管理.pdf

    Java对象生命周期管理是Java开发中不可或缺的一个重要环节。在Java编程中,对象的创建、使用和销毁是由垃圾收集器自动管理的。理解这一过程对于优化应用程序性能至关重要,因为不恰当的对象管理可能导致内存泄漏,...

    Java线程的生命周期的详解

    Java线程的生命周期详解 Java线程的生命周期是多线程编程中一个非常重要的概念,理解线程的生命周期可以帮助开发者更好地掌握Java多线程编程。下面是Java线程的生命周期的详解: 一、线程的状态 Java线程的生命...

Global site tag (gtag.js) - Google Analytics