java学习之高级语法(十七)----- 线程状态

简介: java学习之高级语法(十七)----- 线程状态

 ▶  线程状态概述

当线程被创建并启动后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。

在线程的生命周期中存在6种线程状态 ,在API中 java.lang.Thread.State 这个枚举中给出了六种线程状态。

image.gif编辑

下面这张图展示了线程的6个状态:

image.gif编辑

不需要去研究这6种状态的实现原理,只需要知道在做线程操作中存在这样的状态。

▶ Timed Waiting( 计时等待 )

Timed Waiting 在API中的描述为:一个正在限时等待另一个线程执行一个动作的线程处于这一状态。

之前学到过调用 sleep 方法就可以使当前执行的进程进入到 “ 休眠状态 ”,这其实就是所谓的 Timed Waiting

---  sleep 方法的使用需要注意以下几点:

(1)进入 Timed Waiting 状态的一种常见情形是调用 sleep 方法,单独的线程也可以调用,不一定非要有协作关系

(2)为了让其他线程有机会执行,可以将Thread.sleep()的调用放在线程run()之内,这样才能保证该线程执行过程中会睡眠

(3)sleep与锁无关,线程睡眠到期会自动苏醒

提示:sleep() 中指定的时间是线程不会运行的最短时间,因此,sleep()方法不能保证该线程睡眠到期后就立刻开始执行  

---  进入TimeWaiting(计时等待)有两种方式:

(1)使用sleep(long m)方法在毫秒值结束之后,线程睡醒进入到Runnable / Blocked状态

(2)使用wait(long m)方法,wait方法如果在毫秒值结束之后,还没有被notify唤醒,就会自动醒来,线程睡醒进入到Runnable / Blocked 状态

---  唤醒的方法:

(1)void notify() 唤醒在此对象监视器上等待的单个线程

(2)void notifyAll() 唤醒在此对象监视器上等待的所有线程

Timed Waiting 的线程状态图:

image.gif编辑

▶  BLOCKED( 锁阻塞 )

Blocked状态在API中的介绍为:一个正在阻塞等待一个监视器锁(锁对象)的线程处于这一状态。

例如:线程A和线程B代码使用同一锁,如果线程A获取到锁,线程A进入到Runnable 状态,那么线程B就进入到 Blocked 锁阻塞状态。这是由 Runnable 状态进入 Blocked 状态。除此 Waiting 以及Time Waiting状态也会在某种情况下进入阻塞状态。

image.gif编辑

▶  Waiting(无限等待)

Waiting状态在API中介绍为:一个正在无限期等待另一个线程执行一个特别的(唤醒)动作的线程处于这一状态。

一个调用了某个对象的 Object.wait 方法的线程会等待另一个线程调用此对象的 Object.notify() 方法或Object.notifyAll()方法。

其实 waiting 状态并不是一个线程的操作,它体现的是多个线程间的通信,可以理解为多个线程之间的协作关系,多个线程会争取锁,同时相互之间又存在协作关系。( 会有竞争但更多的时候是协作 )

waiting线程状态图:

image.gif编辑

image.gif编辑

image.gif编辑

image.gif编辑

▶  补充

image.gif编辑


相关文章
|
7天前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
64 0
|
14天前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
104 7
|
14天前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
121 0
|
21天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
88 1
|
21天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
90 1
|
1月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
97 1
|
1月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
55 5
|
1月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
117 1
|
1月前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
103 5
|
1月前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
151 3

热门文章

最新文章