线程的状态

article/2025/9/19 4:26:53

1、线程有5种状态:新建(new Thread)、就绪(runnable),运行(running)、阻塞(blocked)、结束(dead)
在这里插入图片描述

在这里插入图片描述
主要方法:
在这里插入图片描述
setPriority:更改优先级
sleep(休眠):休眠多少毫秒;每个对象都有一把锁,sleep不会释放锁
join(加入):插队,当有新的线程加入时,主线程会进入等待状态,一直到调用join()方法的线程执行结束为止。
yield(礼让):线程A抢到CPU了,线程B在外面等待,这是线程A调用yield()方法,就会退出来和线程B一起再抢一次
注:yield()方法只是提出申请释放CPU资源,至于能否成功释放由JVM决定。由于这个特性,一般编程中用不到此方法,但在很多并发工具包中,yield()方法被使用,如AQS、ConcurrentHashMap、FutureTask等。
isAlive:测试线程是否处于活动状态

yield()方法和sleep()方法有什么区别
yield()方法调用后线程处于RUNNABLE(就绪)状态,而sleep()方法调用后线程处于TIME_WAITING(等待)状态,所以yield()方法调用后线程只是暂时的将调度权让给别人,但立刻可以回到竞争线程锁的状态;而sleep()方法调用后线程处于阻塞状态。

sleep()和wait()方法有什么区别:
 sleep()睡眠时,保持对象锁,仍然占有该锁;
 而wait()睡眠时,释放对象锁。
 但是wait()和sleep()都可以通过interrupt()方法打断线程的暂停状态,从而使线程立刻抛出InterruptedException(但不建议使用该方法)。

sleep()的小应用:每秒打印一次时间

public class TestSleep {public static void main(String[] args) throws InterruptedException {//获取当前时间:毫秒Date start = new Date(System.currentTimeMillis());while(true){//睡眠一秒钟Thread.sleep(1000);//转成标准格式System.out.println(new SimpleDateFormat("HH:mm:ss").format(start));//刷新当前时间start = new Date(System.currentTimeMillis());}}

输出结果:

17:13:59
17:14:00
17:14:01
17:14:02
17:14:03
17:14:04

yield方法使用:


public class TestYield {public static void main(String[] args) {MyYield myYield = new MyYield();new Thread(myYield, "a").start();new Thread(myYield, "b").start();}
}
class MyYield implements Runnable{@Overridepublic void run() {System.out.println("线程" + Thread.currentThread().getName() + "开始执行");Thread.yield(); //线程礼让一下System.out.println("线程" + Thread.currentThread().getName() + "结束执行");}
}

执行结果:

线程a开始执行
线程b开始执行
线程b结束执行
线程a结束执行

join()方法小测试:大佬插队

package com.bes.mybatis_plus.TestState;public class TestJoin implements Runnable{@Overridepublic void run() {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}for(int i = 0; i < 3; i ++ ){System.out.println("线程VIP来了" + i);}}public static void main(String[] args) throws InterruptedException {//启动线程TestJoin testJoin = new TestJoin();Thread thread = new Thread(testJoin);thread.start();for (int i = 0; i < 5; i++) {//主线程跑两次之后,上面线程强势插队,完成之后才轮到main线程继续if(i == 2){thread.join();// 插队}System.out.println("main" + i);}}
}
main0
main1
线程VIP来了0
线程VIP来了1
线程VIP来了2
main2
main3
main4

jdk里线程的六种状态:
NEW (新建)
线程尚未启动的线程状态。
RUNNABLE (就绪,可运行的)
可运行线程的线程状态。
BLOCKED (阻塞)
一个线程的线程状态阻塞等待监视器锁定。
TIMED_WAITING (计时等待)
具有指定等待时间的等待线程的线程状态。
WAITING (等待)
等待线程的线程状态
TERMINATED (结束)
终止线程的线程状态。
看代码:

package com.bes.mybatis_plus.TestState;//观测线程的不同状态
public class TestState {public static void main(String[] args) throws InterruptedException {Thread thread = new Thread(()->{for (int i = 0; i < 3; i++) { //休眠三秒try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}//线程执行完成之后,打印完成System.out.println("线程执行完毕");});//观察线程的状态,此时,没有start启动,应该是new新建状态Thread.State state = thread.getState();System.out.println(state); //NEW//观察启动之后thread.start();//再次获得线程状态state = thread.getState();System.out.println(state); //RUNNABLEwhile(state != Thread.State.TERMINATED){ //线程不是终止状态Thread.sleep(300);//再次获得线程状态state = thread.getState();System.out.println(state); //输出状态}}
}

执行结果:

NEW
RUNNABLE
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
TIMED_WAITING
线程执行完毕
TERMINATED

注:当线程TERMINATED(结束)之后,是不可以再启动的


http://chatgpt.dhexx.cn/article/cSMvvJ1o.shtml

相关文章

基于TCP和HTTP协议的RPC简单实现

一、RPC基本概念 1、基本概念 &#xff08;1&#xff09;RPC&#xff08;Remote Procedure Call Protocol&#xff09;——远程过程调用协议&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议&#xff1b; &#xff08;2&…

RPC协议及常用框架

https://www.jianshu.com/p/8ba4b7b834aa RPC协议 RPC:远程过程调用&#xff0c;原则上来说系统间跨进程的调用都属于RPC范畴 RMI/HTTP/dubbo/Spring Cloud/thrift RPC框架如何实现分布式环境下的远程调用 在一个典型的RPC的使用场景中&#xff0c;包含了服务发现&#xf…

【RPC】RPC基础(二)RPC协议

文章目录 RPC核心原理1. RPC基础1.2 RPC协议为什么设计RPC协议如何设计RPC协议可扩展协议的设计思考 RPC核心原理 1. RPC基础 1.2 RPC协议 RPC协议和HTTP协议一样都属于应用层协议 协议的作用&#xff1a; ​ 协议就像是文章中的标点符号、段落格式等规定&#xff0c;有了…

Nodejs 之 RPC 协议简介

背景 随着 Nodejs 的兴起&#xff0c;越来越多的 Web 服务中间层被搭建起来。如 Node 服务端渲染&#xff0c;BFF(Backend For Frontend))层&#xff0c;而 RPC 是远端过程调用&#xff0c;经常用于 BFF 层。最近&#xff0c;我打算写一个中间层&#xff0c;用 Nodejs 调用 Go…

RPC协议底层原理与实现

RPC协议基本组成 在一个典型RPC的使用场景中&#xff0c;包含了服务发现、负载、容错、 网络传输 、 序列化 等组件&#xff0c;其中RPC协议就指明了程序如何进行网络传输和序列化 。也就是说一个RPC协议的实现就等于一个非透明的RPC调用&#xff0c;如何做到的的呢&#xff1f…

RPC详解

RPC是什么 RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用协议&#xff0c;一种通过网络从远程计算机上请求服务&#xff0c;而不需要了解底层网络技术的协议。RPC它假定某些协议的存在&#xff0c;例如TPC/UDP等&#xff0c;为通信程序之间携带信息数据。在O…

深入理解RPC—协议

协议 一提到协议&#xff0c;你最先想到的可能是 TCP 协议、UDP 协议等等&#xff0c;并且这些网络传输协议的实现有点晦涩难懂。虽然在 RPC 中我们也会用到这些协议&#xff0c;但这些协议更多的是对我们上层应用是透明的&#xff0c;我们 RPC 在使用过程中并不太需要关注他们…

浅谈RPC协议

RPC协议 RPC简介为啥需要RPCRPC的调用过程gRPCProtoBuffergRPC实战 RPC简介 RPC&#xff08;Remote Procedure Call Protocol&#xff09;远程过程调用协议&#xff0c;目标就是让远程服务调用更加简单、透明。RPC 框架负责屏蔽底层的传输方式&#xff08;TCP 或者 UDP&#x…

网络协议——RPC协议综述

拿最简单的场景&#xff0c;客户端调用一个加法函数&#xff0c;将两个整数加起来&#xff0c;返回它们的和。 如果放在本地调用&#xff0c;那是简单的不能再简单了&#xff0c;。但是一旦变成了远程调用&#xff0c;门槛一下子就上去了。 如何解决这五个问题&#xff1f; …

RPC(远程过程调用协议)简介

RPC框架解释 谁能用通俗的语言解释一下什么是 RPC 框架&#xff1f; - 远程过程调用协议RPC&#xff08;Remote Procedure Call Protocol) 首先了解什么叫RPC&#xff0c;为什么要RPC&#xff0c;RPC是指远程过程调用&#xff0c;也就是说两台服务器A&#xff0c;B&#xff0…

RPC和HTTP

一、为什么需要RPC&#xff0c;而不是简单的HTTP接口&#xff1f; RPC&#xff08;即Remote Procedure Call&#xff0c;远程过程调用&#xff09;&#xff0c;主要是基于TCP/IP协议&#xff1b;而HTTP服务主要是基于HTTP协议的。我们都知道HTTP协议是在传输层协议TCP之上的&a…

RPC入门总结(一)RPC定义和原理

转载&#xff1a;深入浅出 RPC - 浅出篇 转载&#xff1a;RPC框架与Dubbo完整使用 转载&#xff1a;深入浅出 RPC - 深入篇 转载&#xff1a;远程调用服务(RPC)和消息队列(Message Queue)对比及其适用/不适用场合分析 一、RPC 1. RPC是什么 RPC&#xff08;Remote Proced…

RPC协议与Http协议区别

RPC调用 RPC是远程过程调用&#xff08;Remote Procedure Call&#xff09;的缩写形式。SAP系统RPC调用的原理其实很简单&#xff0c;有一些类似于三层构架的C/S系统&#xff0c;第三方的客户程序通过接口调用SAP内部的标准或自定义函数&#xff0c;获得函数返回的数据进行处理…

RPC——RPC协议介绍及原理详解

common wx&#xff1a;CodingTechWork 介绍 RPC框架 概念 RPC&#xff08;Remote Procedure Call Protocol&#xff09; 远程过程调用协议。RPC是一种通过网络从远程计算机程序上请求服务&#xff0c;不需要了解底层网络技术的协议。RPC主要作用就是不同的服务间方法调用就…

RPC协议简述

RPC是指远程过程调用&#xff0c;也就是说两台服务器&#xff0c;一个应用部署在其中一台服务器上&#xff0c;想要调用另外一台服务器上应用提供的函数&#xff08;方法&#xff09;&#xff0c;由于不在一个内存空间&#xff0c;不能直接调用&#xff0c;需要通过网络来表达调…

一文带你搞懂HTTP和RPC协议的异同

1 什么是RPC协议 1.1 简介 这是老生常谈的协议了&#xff0c;RPC即远程过程调用&#xff08;Remote Procedure Call&#xff09;&#xff0c; RPC协议是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。 1.2 原理及模型 RPC协议广泛的…

关于RPC协议的通俗理解

根据网上搜索的一些资料摘抄汇总的&#xff0c;如果有误&#xff0c;欢迎斧正。 作者&#xff1a;肖继潮 链接&#xff1a;http://www.zhihu.com/question/25536695/answer/31046384 来源&#xff1a;知乎 著作权归作者所有&#xff0c;转载请联系作者获得授权。 早期单机时代&…

NLP之中文命名实体识别

在MUC-6中首次使用了命名实体&#xff08;named entity&#xff09;这一术语&#xff0c;由于当时关注的焦点是信息抽取&#xff08;information extraction&#xff09;问题&#xff0c;即从报章等非结构化文本中抽取关于公司活动和国防相关活动的结构化信息&#xff0c;而人名…

命名实体识别(biLSTM+crf)

本文是翻译的github这个项目的博客https://guillaumegenthial.github.io/sequence-tagging-with-tensorflow.html。 为什么要用biLSTM?为了使特征提取自动化。当使用CRF工具来进行命名实体识别时&#xff0c;需要自定义模板&#xff08;或者使用默认的模板&#xff09;。 任…

命名实体识别(NER)算法

文章目录 标注方案问题建模评价指标常用的NER方法深度学习方法&#xff08;in survey&#xff09;输入的分布式表示上下文编码解码器**先说MLPsoftmax和CRF**softmax 延伸至多标签解码 **RNN**Pointer Networks 实践Bert SoftmaxBert CRF 参考 之前做了NER的相关工作&#xf…