Java并发编程之线程状态实例分析
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,今天小编给大家分享一下Java并发编程之线程状态实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们
千家信息网最后更新 2025年11月12日Java并发编程之线程状态实例分析
今天小编给大家分享一下Java并发编程之线程状态实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
线程状态概述
线程由生到死的完整过程:
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态。在线程的生命周期中,有几种状态呢?在API中java.lang.Thread.State这个枚举中给出了六种线程状态:
| 线程状态 | 导致状态发生条件 |
|---|---|
| NEW(新建) | 线程刚被创建,但是并未启动。还没调用start方法。MyThread t = new MyThread只有线程对象,没有线程特征。 |
| Runnable(可运行) | 线程可以在java虚拟机中运行的状态,可能正在运行自己代码,也可能没有,这取决于操作系统处理器。调用了t.start()方法 :就绪(经典教法) |
| Blocked(锁阻塞) | 当一个线程试图获取一个对象锁,而该对象锁被其他的线程持有,则该线程进入Blocked状态;当该线程持有锁时,该线程将变成Runnable状态。 |
| Waiting(无限等待) | 一个线程在等待另一个线程执行一个(唤醒)动作时,该线程进入Waiting状态。进入这个状态后是不能自动唤醒的,必须等待另一个线程调用notify或者notifyAll方法才能够唤醒。 |
| Timed Waiting(计时等待) | 同waiting状态,有几个方法有超时参数,调用他们将进入Timed Waiting状态。这一状态将一直保持到超时期满或者接收到唤醒通知。带有超时参数的常用方法有Thread.sleep 、Object.wait。 |
| Teminated(被终止) | 因为run方法正常退出而死亡,或者因为没有捕获的异常终止了run方法而死亡。 |

睡眠sleep方法
状态中有一个状态叫做计时等待,可以通过Thread类的方法来进行演示。 public static void sleep(long time) 让当前线程进入到睡眠状态,到毫秒后自动醒来继续执行
//主线程执行到sleep方法会休眠1秒后再继续执行public class Test{ public static void main(String[] args){ for(int i = 1;i<=5;i++){ Thread.sleep(1000); System.out.println(i) } }}等待和唤醒
public void wait() : 让当前线程进入到等待状态 此方法必须锁对象调用。
public class Demo1_wait { public static void main(String[] args) throws InterruptedException { // 步骤1 : 子线程开启,进入无限等待状态, 没有被唤醒,无法继续运行. new Thread(() -> { try { System.out.println("begin wait ...."); synchronized ("") { "".wait(); } System.out.println("over"); } catch (Exception e) { } }).start(); }public void notify() : 唤醒当前锁对象上等待状态的线程 此方法必须锁对象调用。
public class Demo2_notify { public static void main(String[] args) throws InterruptedException { // 步骤1 : 子线程开启,进入无限等待状态, 没有被唤醒,无法继续运行. new Thread(() -> { try { System.out.println("begin wait ...."); synchronized ("") { "".wait(); } System.out.println("over"); } catch (Exception e) { } }).start(); //步骤2: 加入如下代码后, 3秒后,会执行notify方法, 唤醒wait中线程. Thread.sleep(3000); new Thread(() -> { try { synchronized ("") { System.out.println("唤醒"); "".notify(); } } catch (Exception e) { } }).start(); }}等待唤醒的一个小例子
定义一个集合,包子铺线程完成生产包子,包子添加到集合中;吃货线程完成购买包子,包子从集合中移除。
当包子没有时(包子状态为false),吃货线程等待.
包子铺线程生产包子(即包子状态为true),并通知吃货线程(解除吃货的等待状态)
public class BaoZiPu extends Thread{ private List list ; public BaoZiPu(String name,ArrayList list){ super(name); this.list = list; } @Override public void run() { int i = 0; while(true){ //list作为锁对象 synchronized (list){ if(list.size()>0){ //存元素的线程进入到等待状态 try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //如果线程没进入到等待状态 说明集合中没有元素 //向集合中添加元素 list.add("包子"+i++); System.out.println(list); //集合中已经有元素了 唤醒获取元素的线程 list.notify(); } } } }} public class ChiHuo extends Thread { private List list ; public ChiHuo(String name,ArrayList list){ super(name); this.list = list; } @Override public void run() { //为了能看到效果 写个死循环 while(true){ //由于使用的同一个集合 list作为锁对象 synchronized (list){ //如果集合中没有元素 获取元素的线程进入到等待状态 if(list.size()==0){ try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //如果集合中有元素 则获取元素的线程获取元素(删除) list.remove(0); //打印集合 集合中没有元素了 System.out.println(list); //集合中已经没有元素 则唤醒添加元素的线程 向集合中添加元素 list.notify(); } } } }} public class Demo { public static void main(String[] args) { //等待唤醒案例 List<String> list = new ArrayList<>(); // 创建线程对象 BaoZiPu bzp = new BaoZiPu("包子铺",list); ChiHuo ch = new ChiHuo("吃货",list); // 开启线程 bzp.start(); ch.start(); }}以上就是"Java并发编程之线程状态实例分析"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
线程
状态
元素
包子
方法
对象
吃货
运行
知识
篇文章
包子铺
步骤
实例
实例分析
分析
编程
代码
内容
参数
此方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术学校读出来做什么
网络安全之定位功能的正确使用
白岩松网络安全视频
英文网络安全问题
网络安全绘画展
软件开发在职研究生好考吗
办公小软件开发
ipad软件开发者
副词笔记软件开发
职称 三级网络技术
数据库原理及应用第四版全部答案
临床数据库建立
ftp服务器管理器
市南区商城软件开发解决方案
asp sql数据库操作
数据库自增列 索引
数据库常量实验
荆州软件开发招聘
sql数据库4000版本
怎么申请服务器端口
龙岗区新一代网络技术开发工艺
服务器处理器发布会
数据库管理系统也根据
web应用 数据库加锁
北京嘉业诚互联网科技有限公司
网络安全家长回执单
360维护公司网络安全
网络安全网络限速
ftp服务器管理器
数据库中的表格打不开