java线程状态详解(6种)

java线程类为:java.lang.Thread,其实现java.lang.Runnable接口。

public
class Thread implements Runnable {
    /* Make sure registerNatives is the first thing <clinit> does. */
    private static native void registerNatives();
    static {
        registerNatives();
    }

    private volatile String name;
    private int            priority;
    private Thread         threadQ;
    private long           eetop;
    
    ......
}

线程在运行过程中有6种状态,分别如下:

NEW:初始状态,线程被构建,但是还没有调用start()方法

RUNNABLE:运行状态,Java线程将操作系统中的就绪和运行两种状态统称为“运行状态”

BLOCK:阻塞状态,表示线程阻塞于锁

WAITING:等待状态,进入该状态表示当前线程需要等待其他线程做出一些特定动作(通知或者等待)

TIME_WAITING:超时等待状态,可以在等待的时间自行返回的

TERMINATED:终止状态,表示当前线程已经执行完毕

2021-11-07 14:55

相关教程

更多

Java 多线程编程

Java 多线程编程     Java给多线程编程提供了内置的支持。一个多线程程序包含两个或多个能并发运行的部分。程序的每一部分都称作一个线程,并且每个线程定义了一个独立的执行路径。 多线程是多任务的一种特别的形式。多线程比多任务需要更小的开销。 这里定义和线程相关的另一个术语:进程:一个

HTTP 响应状态码详解


                            

请教多线程JAVA问题

需求:  命令队列(存放n个命令,ip 端口 命令ID等信息),通过多线程scoket(线程数是20个).从命令队列里面取出 命令,解析执行。  连接的服务器,连接数是有限制的最大2个连接。所以scoket 必须维持长连接  最多可以有20个线程 连接20个不同IP的机器。但机器是N个。  问题1 怎么在多线程中维持长连接发送 接收数据,相同IP的命令发送接收完后需要断开连接。     问题补充:

一步一步掌握java的线程机制(一)----创建线程

现在将1年前写的有关线程的文章再重新看了一遍,发现过去的自己还是照本宣科,毕竟是刚学java的人,就想将java的精髓之一---线程进制掌握到手,还是有点难度。等到自己已经是编程一年级生了,还是无法将线程这个高级的概念完全贯通,所以,现在趁着自己还在校,尽量的掌握多点有关线程机制的知识。 我们以一个简单的例子开始下手:      public class SwingTypeTester exten

关于线程的问题

在学习多线程的时候,有一个问题总会困扰着我--  关于sleep方法.当调用此方法时当前线程会在此sleep时间段内让出  执行权,自己处于阻塞状态.  问题是当多个线程并发执行时,都会调用该方法,都会休眠相同的时间,感觉就是  每个线程只是停留了一下,并不能体会到sleep方法的作用?  不知道大家是怎么理解这个问题的,求解!

求推荐JAVA 多线程编程书籍

求推荐JAVA 多线程编程书籍

JAVA设计模式学习23——状态模式

状态(state)模式:状态模式的意图是,允许一个对象在其内部状改变时改变它的行为。看起来就像是改变了它的类一样。     主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。          状态模式的结构如下图:                从图中可以看出状态模式有以下角色:          1、抽象状

Callable接口实现Java多线程

Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。Callable和Runnable有几点不同:(1)Callable规定的方法是call(),而Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。 (3)call()方法可抛出异常,而run()方法是不能抛出异常的.(4)运行Callable任务可拿到一个Future对象...

关于线程

线程,学了挺久了。我发现我不会写总结这种东西。 好吧,我又词穷了。不知道该怎么写了。先打开eclipse看看。先说说我对线程的理解把。 我觉得线程就是好几条流水线在一起工作,能提高工作效率和空间利用率。就像一个工厂,如果只用一条流水线,那每天生产的鞋子估计少得可怜,利润应该也不怎么样,这样的工厂应该关门了。但是如果一个工厂有好多条流水线,同时生产好多鞋子,那就可以挣好多钱,可以在这个行业有很强的竞

Java Bug模式详解

Java Bug模式详解的内容摘要:英文版:Bug Patterns In Java内容简介本书特点● 把软件开发的调试过程与极限编程方法融为一体● 对软件实例进行深层次的剖析● 为常见的调试问题提供便捷的参考清单本书着重讨论和日常编程

MyBatis Java API详解


                            

多线程问题

请教各位。本人在尝试写一个银行调度系统。但是多线程上遇到问题。目前有三个并发线程,但是同时只能运行两个线程,这是何解?!!!  代码如下:  public class Number  {  private long number = 0;  private long max = 0;  private String type = null;  public Number()  {  }  publ

action 线程问题。

比如现在有个Action,叫CZaction,有很多用户会访问这个action,这个action有对数据库操作,用线程Thread.sleep(1000);睡眠一秒才返回给用户。  我有这些疑问:1.如果很多用户访问这个action,睡眠线程会不会导致返回的action混乱?就是本来是返回给a的却返回给b了?  2.如果不用mapping.findForward()到其他页面,用response.

java反射详解(一)_Class类

Java类用于描述一类事物的共性,该类事物有什么属性,没有什么属性,至于这个属性的值是什么,则是由这个类的实例对象来确定的,不同的实例对象有不同的属性值。

一步一步掌握java的线程机制(二)----Thread的生命周期

之前讲到Thread的创建,那是Thread生命周期的第一步,其后就是通过start()方法来启动Thread,它会执行一些内部的管理工作然后调用Thread的run()方法,此时该Thread就是alive(活跃)的,而且我们还可以通过isAlive()方法来确定该线程是否启动还是终结。 一旦启动Thread后,我们就只能执行一个方法:run(),而run()方法就是负责执行Thread的任务,

最新教程

更多

redis从库只读设置-redis集群管理

默认情况下redis数据库充当slave角色时是只读的不能进行写操作,如果写入,会提示以下错误:READONLY You can't write against a read only slave.  127.0.0.1:6382> set k3 111  (error) READONLY You can't write against a read only slave. 如果你要开启从库

Netty环境配置

netty是一个java事件驱动的网络通信框架,也就是一个jar包,只要在项目里引用即可。

Netty基于流的传输处理

​在TCP/IP的基于流的传输中,接收的数据被存储到套接字接收缓冲器中。不幸的是,基于流的传输的缓冲器不是分组的队列,而是字节的队列。 这意味着,即使将两个消息作为两个独立的数据包发送,操作系统也不会将它们视为两个消息,而只是一组字节(有点悲剧)。 因此,不能保证读的是您在远程定入的行数据

Netty入门实例-使用POJO代替ByteBuf

使用TIME协议的客户端和服务器示例,让它们使用POJO来代替原来的ByteBuf。

Netty入门实例-时间服务器

Netty中服务器和客户端之间最大的和唯一的区别是使用了不同的Bootstrap和Channel实现

Netty入门实例-编写服务器端程序

channelRead()处理程序方法实现如下

Netty开发环境配置

最新版本的Netty 4.x和JDK 1.6及更高版本

电商平台数据库设计

电商平台数据库表设计:商品分类表、商品信息表、品牌表、商品属性表、商品属性扩展表、规格表、规格扩展表

HttpClient 上传文件

我们使用MultipartEntityBuilder创建一个HttpEntity。 当创建构建器时,添加一个二进制体 - 包含将要上传的文件以及一个文本正文。 接下来,使用RequestBuilder创建一个HTTP请求,并分配先前创建的HttpEntity。

MongoDB常用命令

查看当前使用的数据库    > db    test  切换数据库   > use foobar    switched to db foobar  插入文档    > post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new

快速了解MongoDB【基本概念与体系结构】

什么是MongoDB MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era. MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

windows系统安装MongoDB

安装 下载MongoDB的安装包:mongodb-win32-x86_64-2008plus-ssl-3.2.10-signed.msi,按照提示步骤安装即可。 安装完成后,软件会安装在C:\Program Files\MongoDB 目录中 我们要启动的服务程序就是C:\Program Files\MongoDB\Server\3.2\bin目录下的mongod.exe,为了方便我们每次启动,我

Spring boot整合MyBatis-Plus 之二:增删改查

基于上一篇springboot整合MyBatis-Plus之后,实现简单的增删改查 创建实体类 添加表注解TableName和主键注解TableId import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baom

分布式ID生成器【snowflake雪花算法】

基于snowflake雪花算法分布式ID生成器 snowflake雪花算法分布式ID生成器几大特点: 41bit的时间戳可以支持该算法使用到2082年 10bit的工作机器id可以支持1024台机器 序列号支持1毫秒产生4096个自增序列id 整体上按照时间自增排序 整个分布式系统内不会产生ID碰撞 每秒能够产生26万ID左右 Twitter的 Snowflake分布式ID生成器的JAVA实现方案

Spring boot整合mybatis plus

快速了解mybatis plus 是对Mybatis框架的二次封装和扩展 纯正血统:完全继承原生 Mybatis 的所有特性 最少依赖:仅仅依赖Mybatis以及Mybatis-Spring 性能损耗小:启动即会自动注入基本CURD ,性能无损耗,直接面向对象操作 自动热加载:Mapper对应的xml可以热加载,大大减少重启Web服务器时间,提升开发效率 性能分析:自带Sql性能分析插件,开发测试