Java线程的生命周期及线程的几种状态
线程也具有生命周期,主要包括 7 种状态:
出生状态、
就绪状态、
运行状态、
等待状态、
休眠状态、
阻塞状态、
死亡状态,
下面对线程生命周期中的 7 种状态做说明。
- 出生状态:用户在创建线程时所处的状态,在用户使用该线程实例调用 start() 方法之前,线程都处于出生状态。
- 就绪状态:也称可执行状态,当用户调用 start() 方法之后,线程处于就绪状态。
- 运行状态:当线程得到系统资源后进入运行状态。
- 等待状态:当处于运行状态下的线程调用 Thread 类的
wait()
方法时,该线程就会进入等待状态。进入等待状态的线程必须调用Thread 类的notify()
方法才能被唤醒。notifyAll()
方法是将所有处于等待状态下的线程唤醒。 - 休眠状态:当线程调用 Thread 类中的
sleep()
方法时,则会进入休眠状态。 - 阻塞状态:如果一个线程在运行状态下发出输入/输出请求,该线程将进入阻塞状态,在其等待输入/输出结束时,线程进入就绪状态。对阻塞的线程来说,即使系统资源关闭,线程依然不能回到运行状态。
- 死亡状态:当线程的
run()
方法执行完毕,线程进入死亡状态。
提示:一旦线程进入可执行状态,它会在就绪状态与运行状态下辗转,同时也可能进入等待状态、休眠状态、阻塞状态或死亡状态。
根据图所示,可以总结出使线程处于就绪状态有如下几种方法。
- 调用 sleep() 方法。
- 调用 wait() 方法。
- 等待输入和输出完成。
当线程处于就绪状态后,可以用如下几种方法使线程再次进入运行状态。
- 线程调用 notify() 方法。
- 线程调用 notifyAll() 方法。
- 线程调用 intermpt() 方法。
- 线程的休眠时间结束。
- 输入或者输出结束。
线程状态转换
Java线程的生命周期及线程的几种状态相关推荐
- Java—线程的生命周期及线程控制方法详解
关注微信公众号:CodingTechWork,一起学习进步. 线程生命周期5种状态 介绍 线程的生命周期经过新建(New).就绪(Runnable).运行(Running).阻塞(Bolocked ...
- 线程(线程基本概念、java实现多线程、使用多线程、线程的生命周期、线程同步、线程死锁)
(一)线程基本概念 一. 程序, 进程, 线程的概念 程序: 使用某种语言编写一组指令(代码)的集合,静态的 进程: 运行的程序,表示程序一次完整的执行, 当程序运行完成, 进程也就结束了 个人电脑: ...
- java 多线程编程(包括创建线程的三种方式、线程的生命周期、线程的调度策略、线程同步、线程通信、线程池、死锁等)
1 多线程的基础知识 1.1 单核CPU和多核CPU 单核CPU,其实是一种假的多线程,因为在一个时间单元内,也只能执行一个线程的任务.微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那 ...
- 线程的生命周期 和 线程的通讯
线程的生命周期 概述: 线程从创建到执行完毕的过程就叫做生命周期,整个周期中会不同的状态,状态之间会发生相互转换的现象. 状态罗列: 新建:线程创建出来但是没有开启 就绪:start方法开启了线程, ...
- 线程的生命周期?线程有几种状态
1.线程通常有五种状态:创建,就绪,运行.阻塞和死亡状态. 2.阻塞的情况又分为三种: (1).等待阻塞:运行的线程执行wait方法,该线程会释放占用的所有资源,JVM会把该线程放入"等待 ...
- 线程的生命周期_[线程设计]通过观察者模式监控线程生命周期
推荐书籍:<Java高并发编程详解> 一.无法掌控 Thread 的生命周期 在 Java 中线程的实现只有一个,就是 Thread . 下面是启动一个线程的通用代码,如下: 通过 new ...
- 【JAVA多线程学习笔记】(1)实现线程的方式 线程生命周期 操作线程的方法
文章目录 两种方式实现线程 继承Thread类 模拟银行叫号的程序 Runnable接口 代码1:(与swing相结合创建gui程序) Thread类的⼏个常⽤⽅法 线程生命周期 操作线程的方法 代码 ...
- java -- 线程的生命周期
线程的生命周期 1.线程的生命周期线程是一个动态执行的过程,它也有一个从产生到死亡的过程. (1)生命周期的五种状态 新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新 ...
- java方法生命周期_Java线程的第二种实现方式以及生命周期
上篇中我们了解了Java线程的第一种实现方式,主要分两步,第一步是继承java.lang.Thread; 第二步是重写run()方法.接下来我们来看Java线程的第二种实现方式,也是分为两步,第一步, ...
最新文章
- axios 一些用法总结
- 根据表名如何查找使用它的程序名、接口等
- 手机隔空充电,会有辐射吗?
- sap中泰国有预扣税设置吗_泰国的绘图标志| Python中的图像处理
- C++ opengl 绘制三角形带
- C#LeetCode刷题-树
- python 数据库模块_MySQl 数据库 之 python模块 pymysql 简单介绍
- stl 向量_C ++ STL中的向量delete()和clear()
- R 语言之数据分析高级方法「GLM 广义线性模型」
- 为什么古代皇帝总是治不了腐败?因为拿得越多、越安全
- java线程状态切换图
- 微信小程序picker-view中的view的高度修改问题,只能用px单位
- C++ 使用replace()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
- z世代消费力白皮书_年轻世代成消费主力军,时尚界迎来IP时代
- verilog增量式编码器
- 逻辑回归(神经网络Sigmod激活函数,计量logit模型)
- ACE的CDR中的字节对齐问题
- 鸟哥的服务器《十三》Web服务器
- 【网络通信】Teardrop编程创造虚假IP包
- Hibernate 3.6.10 jar包下载链接