首页 > 其他分享 >线程状态转换

线程状态转换

时间:2023-04-22 19:44:23浏览次数:26  
标签:状态 转换 Thread 等待 Object 线程 Timeout 方法

新建(New)

创建后尚未启动。

可运行(Runnable)

可能正在运行,也可能正在等待 CPU 时间片。

包含了操作系统线程状态中的 Running 和 Ready。

阻塞(Blocking)

等待获取一个排它锁,如果其线程释放了锁就会结束此状态。

无限期等待(Waiting)

等待其它线程显式地唤醒,否则不会被分配 CPU 时间片。

进入方法退出方法
没有设置 Timeout 参数的 Object.wait() 方法 Object.notify() / Object.notifyAll()
没有设置 Timeout 参数的 Thread.join() 方法 被调用的线程执行完毕
LockSupport.park() 方法 -

 


限期等待(Timed Waiting)

无需等待其它线程显式地唤醒,在一定时间之后会被系统自动唤醒。

调用 Thread.sleep() 方法使线程进入限期等待状态时,常常用“使一个线程睡眠”进行描述。

调用 Object.wait() 方法使线程进入限期等待或者无限期等待时,常常用“挂起一个线程”进行描述。

睡眠和挂起是用来描述行为,而阻塞和等待用来描述状态。

阻塞和等待的区别在于,阻塞是被动的,它是在等待获取一个排它锁。而等待是主动的,通过调用 Thread.sleep() 和 Object.wait() 等方法进入。


 

进入方法退出方法
Thread.sleep() 方法 时间结束
设置了 Timeout 参数的 Object.wait() 方法 时间结束 / Object.notify() / Object.notifyAll()
设置了 Timeout 参数的 Thread.join() 方法 时间结束 / 被调用的线程执行完毕
LockSupport.parkNanos() 方法 -
LockSupport.parkUntil() 方法 -

#


死亡(Terminated)

可以是线程结束任务之后自己结束,或者产生了异常而结束。

 

 

标签:状态,转换,Thread,等待,Object,线程,Timeout,方法
From: https://www.cnblogs.com/cnetsa/p/17343768.html

相关文章

  • Forest-声明式HTTP客户端框架-集成到SpringBoot实现调用第三方restful api并实现接口
    场景Forest声明式HTTP客户端API框架,让Java发送HTTP/HTTPS请求不再难。它比OkHttp和HttpClient更高层,是封装调用第三方restfulapiclient接口的好帮手,是retrofit和feign之外另一个选择。通过在接口上声明注解的方式配置HTTP请求接口。官网:Forest 代码地址:forest:声明式HTTP客户......
  • 类型转换
    类型转换低---------------------------------------------------->高byte,short,char->int->long->float->double强制类型转换高-->低inti=128;bytej=(byte)i;自动类型转换低-->高inti=128;doublej=i;注意不能对布尔值进行转换不能把对象类型转换为不......
  • Java 把 Map 的值(Value)转换为 Array, List 或 Set
    概述在这篇短文中,我们将会展示如何把Map中的值取出来,转换为一个Array,、List或者一个Set。 当然,你可以使用JavaJDK来进行转换,你也可以使用Guava来进行转换。 首先,让我们来看看,如何使用原生的JavaJDK把一个Map的值换行为Array。@TestpublicfinalvoidgivenU......
  • Java 把 Map 的值(Value)转换为 Array, List 或 Set
    概述在这篇短文中,我们将会展示如何把Map中的值取出来,转换为一个Array,、List或者一个Set。 当然,你可以使用JavaJDK来进行转换,你也可以使用Guava来进行转换。 首先,让我们来看看,如何使用原生的JavaJDK把一个Map的值换行为Array。@Testpublicfinal......
  • ZSTD多线程压缩
    测试代码:1//main.cpp2//34#include<iostream>5#include<fstream>6#include<vector>7#include<chrono>8#include<thread>9#include"./zstd/lib/zstd.h"1011usingbyte=uint8_t;12usingbuff......
  • 为什么Sync.Pool不需要加锁却能保证线程安全
    1.简介我们在Sync.Pool:提高go语言程序性能的关键一步一文中,已经了解了使用sync.Pool来实现对象的复用以减少对象的频繁创建和销毁,以及使用sync.Pool的一些常见注意事项。在这篇文章中,我们将剖析sync.Pool内部实现中,介绍了sync.Pool比较巧妙的内部设计思路以及其实现方式。......
  • 线程池
    线程池就是管理一系列线程的资源池,其提供了一种限制和管理线程资源的方式。每个线程池还维护一些基本统计信息,例如已完成任务的数量。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。线程池的好处:(降低线程创建和销毁的时间成本,提高线程可管理性)......
  • PCF8591 AD/DA转换基于51
    #include<reg52.h>#include<intrins.h>//内部有_nop_();//IIC模拟时序实现//注意:SCL为高电平时变化SDA数据是起始或者终止信号;所以若不是起始或者终止信号,需要在SCL为低电平时变化SDA数据sbitSDA=P2^0;sbitSCL=P2^1;sbitLED=P2^3;sbitwei=P2^6;sbitdu......
  • python多线程接口请求
    importthreadingimportrequestsrequests.packages.urllib3.disable_warnings()urls_list=["http://127.0.0.1:5000"for_inrange(1,101)]response_ok=0response_error=0defget_response_code(url):globalresponse_errorglobalr......
  • 多线程 —— 线程的六种状态
    一、线程的六种状态,如下图所示二、六种状态介绍:线程状态具体含义NEW一个尚未启动的线程的状态。也称之为初始状态、开始状态。线程刚被创建,但是并未启动。还没调用start方法。MyThreadt=newMyThread()只有线程对象,没有线程特征。RUNNABLE当我们调用线程对象的s......