java学习——111.线程的状态

线程是从创建到执行完毕,总共有6个状态,

1. New(新建态)

当用new操作符创建一个新线程时,如 new Thread(r), 该线程还没有开始运行。这意味着它的状态是new。

2. Runnable(运行态)

一旦线程调用start()方法,线程就处于runnable状态。

3. Blocked(阻塞态)

受阻塞并等待某个监视器锁的线程处于这种状态。

4. Waiting(等待态)

无限期地等待另一个线程来执行。某一特定操作的线程处于这种状态。

5.Timed Waiting(计时等待态)

当线程处于被阻塞或等待状态时,它暂时不活动。它不运行任何代码且消耗最少的资源。直到线程调度器重新激活它。细节取决于它是怎样达到非活动状态的。

6. Terminated(终止态)

线程因如下两个原因之一而被终止:

1) 因为run方法正常退出而自然死亡

2) 因为一个没有捕获的异常终止了run方法意外死亡

各状态是可以转换的,借用网络上一图说明各状态的转换:

简单示例:

本例说明了三个状态:新建后为NEW状态,start()后为RUNNABLE状态,线程执行结束后为TERMINATED态。

其完整代码如下:

本例仅简单演示这三个状态,简单起见,我让run()方法的方法体为空。

public class ThreadLearn implements Runnable{

public void run() { }

public static void main(String args[]) {

ThreadLearn target1=new ThreadLearn();//创建类的一个对象

Thread thread=new Thread(target1,"lay");//创建线程类的对象,target1为线程的目标对象,线程名为“奇数”

System.out.println("new 后"+thread.getName()+"线程的状态是:"+thread.getState());

thread.start();//启动线程

System.out.println("start 后"+thread.getName()+"线程的状态是:"+thread.getState());

System.out.println("start 后"+thread.getName()+"线程是否活动中:"+thread.isAlive());

System.out.println("start 后"+thread.getName()+"线程的状态是:"+thread.getState())

}

}

其运行结果如下:

(0)

相关推荐

  • 【JAVA并发第二篇】Java线程的创建与运行,线程状态与常用方法

    【JAVA并发第二篇】Java线程的创建与运行,线程状态与常用方法

  • java学习——115.线程的互斥

    线程互斥是解决线程间竞争关系的手段. 在上一篇中,由于两个线程对同一个账户资源进行操作,两线程在同时对"张三"这个账户时进行操作时,存在着竞争关系,就造成了输出结果的不正确. 要解 ...

  • Java学习——114.交互线程

    线程在执行的过程中,有可能会需要共享资源或者交换数据,则称这一组线程为交互线程. 线程间的交互存在两种关系:竞争和协作. 竞争关系是指,两个线程同时使用同一个资源时,会产生竞争.此时,由于线程的并发执 ...

  • Java学习-注解和反射

    注解 java.Annotation Annotation的作用:可以呗其他程序读取 Annotation的格式 注解是:@注释名 在代码中存在,还可以添加一些参数 ​@SuppressWarning ...

  • Java学习-多线程

    多线程 任务(Task).进程(Process).线程(Thread) 进程的创建 1.继承Thread类 自定义线程类继承Thread类 重写run()方法,编写线程执行体 创建线程对象,调用sta ...

  • Java学习-Mybatis

    Mybatis Maven依赖: <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependenc ...

  • Java 学习笔记

    您对计算机(电脑)有了解吗? 计算机组成 系统软件 直接和硬件交互的软件叫系统软件,例如 win7.win8.Linux.mac等操作系统 应用软件 通常在运行在系统软件上,也就是在系统软件上开发的软 ...

  • jmeter压测学习15-setUp线程组实现用户先登录

    前言 setUp线程组 我们需要测试的是查询用户个人信息接口:/api/v1/userinfo,但是查询接口需要有用户登录的token才有权限去访问. 那么我们的前置操作就是先登录,取出token,后 ...

  • jmeter压测学习16-setUp线程组批量登录

    前言 前面一篇已经实现了在 setUp 线程组实现单个用户先登录后提取token给其它线程组使用,在压测的时候,单个用户登录很显然不能满足我们的压测需求. 我们在压测接口的时候,需批量获取多个用户登录 ...

  • jmeter压测学习19-tearDown线程组使用JDBC清理测试数据

    前言 在使用jmeter测试的时候,测试之前会有个数据准备工作,测试完成后如果产生了一些多余的数据,我们应该对数据还原清理相关的测试数据. 测试结束使用tearDown线程组清理本次测试产生的多余数据 ...