线程按顺序执行
这是一个要求线程按顺序执行的代码importjava.util.*;publicclassseqTest{publicstaticvoidmain(String[]args){myRunnable r1newmyRunnable(1);Threadt1newThread(r1);myRunnable r2newmyRunnable(2);Threadt2newThread(r2);myRunnable r3newmyRunnable(3);Threadt3newThread(r3);t1.start();t2.start();t3.start();}}classmyRunnableimplementsRunnable{privatestaticObjectlocknewObject();privatestaticintturn1;privateintID;publicvoidmyRunnable(){}publicmyRunnable(intID){this.IDID;}publicvoidrun(){for(inti0;i3;i){//这个for循环是为了让每个线程能执行三次synchronized(lock){try{while(turn!ID){lock.wait();}System.out.println(ThreadID执行);if(ID1)turn2;elseif(ID2)turn3;elseif(ID3)turn1;lock.notifyAll();}catch(Exceptione){e.printStackTrace();}}}}}写这段代码中发现自己对线程理解出现的三个问题问题1线程自动调用的方法当线程调用start()后JVM 会为该线程开辟独立的栈空间并自动调用其run()方法。我们无需也不能直接调用run()只能由 JVM 在线程启动后自动触发。问题2线程wait()后是怎么运行的当线程执行到lock.wait()后它会立即进入等待集并释放锁wait()之后的代码暂停执行。当该线程后续被其他线程唤醒并重新获得锁时会从wait()之后的第一条语句继续执行而不是重新进入同步块的开头。其执行流程可用以下代码块抽象展示synchronized(lock){while(条件不满足){// 线程执行到这里lock.wait();// 被唤醒后从这里继续执行}// 执行任务}问题3为什么三个线程看似在同一个run()方法中交替执行首先要明确每个线程执行的是各自独立的run()方法。之所以看起来像是在同一个run()中交替执行是因为三个线程共用同一把锁lock并且通过wait()/notifyAll()机制实现了严格的顺序调度——任意时刻只有拿到锁的线程能够执行同步块内的代码其他线程要么被阻塞在入口处要么处于等待集中。下面的时序表可以直观地展示三个线程与锁状态的交替过程时间线程1线程2线程3lock 状态t1执行到 synchronized执行到 synchronized执行到 synchronized空闲t2拿到锁进入等待blocked等待blocked被线程1持有t3执行代码等待等待被线程1持有t4lock.wait()等待等待释放空闲t5进入等待集竞争锁竞争锁被线程2拿到t6在等待集拿到锁进入等待被线程2持有t7在等待集执行代码等待被线程2持有t8在等待集lock.notifyAll()等待被线程2持有t9被唤醒移到入口集退出同步块还在等待释放空闲t10竞争锁已退出竞争锁被线程3拿到t11等待线程2结束拿到锁进入被线程3持有t12等待执行代码被线程3持有t13等待lock.notifyAll()被线程3持有t14竞争锁退出同步块释放空闲t15拿到锁进入线程3结束被线程1持有t16从 wait() 后继续执行-被线程1持有t17执行剩余代码-被线程1持有t18退出同步块-释放空闲

相关新闻

低温陶瓷油墨行业需求状况与投资规划建议报告2026年版

低温陶瓷油墨行业需求状况与投资规划建议报告2026年版

低温陶瓷油墨行业需求状况与投资规划建议报告2026年版核心判断:低温陶瓷油墨的商业化逻辑,并不是单纯替代传统高温陶瓷釉料或丝网印刷油墨,而是围绕低温烧结、数字化印刷、节能制造、图案定制和多基材适配形成的新型材料平台。短期看&#xf…

2026/7/8 10:02:58 阅读更多 →
高压安全隔离系统设计与实现:ISOM8710与PIC18F4515应用

高压安全隔离系统设计与实现:ISOM8710与PIC18F4515应用

1. 高压安全隔离系统概述 在工业自动化、电力电子和新能源系统中,高压安全隔离是一个至关重要的设计环节。使用ISOM8710数字隔离器和PIC18F4515微控制器构建的隔离系统,能够有效解决高低压电路之间的信号传输问题,同时确保系统安全性和可靠性…

2026/7/8 10:00:57 阅读更多 →
基于WSEN-ISDS与MKV44F256的3D运动跟踪系统设计

基于WSEN-ISDS与MKV44F256的3D运动跟踪系统设计

1. 项目背景与核心组件解析 在工业自动化、机器人控制和无人机导航等领域,精确跟踪物体在三维空间中的运动状态是至关重要的基础功能。这个项目展示了如何利用WSEN-ISDS三轴MEMS惯性传感器与MKV44F256VLH16微控制器构建完整的运动跟踪系统。 WSEN-ISDS(…

2026/7/8 9:58:57 阅读更多 →

最新新闻

Science Robotics|为什么HRI研究“复制失败”反而是好事?

Science Robotics|为什么HRI研究“复制失败”反而是好事?

导语:在人机交互研究领域,当不同实验室用同样的方法做同一个实验,却得出不同结果时,这通常被视为“复制失败”,是研究不够严谨的证据。但一篇发表在《Science Robotics》上的观点文章提出了一个颠覆性的主张&#xff1…

2026/7/8 10:57:48 阅读更多 →
RK3588 AI视频分析常见问题和排查清单:明厨亮灶场景下的选型与算力估算指南

RK3588 AI视频分析常见问题和排查清单:明厨亮灶场景下的选型与算力估算指南

作为一名边缘计算和AI视频分析部署顾问,我常听到开发者或项目经理抱怨:“为什么我买的盒子号称有超高算力,一上现场跑 4 路视频就卡得像PPT?”或者“明厨亮灶项目到底该用 GPU 服务器还是边缘盒子,心里完全没底。”AI落…

2026/7/8 10:55:45 阅读更多 →
history / historic / historical 完整初学者拆解

history / historic / historical 完整初学者拆解

history / historic / historical 完整初学者拆解(发音词义用法对比) 一、音标&重音对比(美式) history /ˈhɪstəri/ n. 历史 重音:第1音节historic /hɪˈstɔːrɪk/ adj. 有重大历史意义的 重音:第…

2026/7/8 10:51:39 阅读更多 →
3分钟解决魔兽争霸3兼容性问题:WarcraftHelper终极优化指南

3分钟解决魔兽争霸3兼容性问题:WarcraftHelper终极优化指南

3分钟解决魔兽争霸3兼容性问题:WarcraftHelper终极优化指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在新电脑上卡顿…

2026/7/8 10:51:38 阅读更多 →
STM32F411RE与TB67H480FNG的电机控制方案解析

STM32F411RE与TB67H480FNG的电机控制方案解析

1. 为什么选择TB67H480FNGSTM32F411RE组合 在电机控制和嵌入式系统开发领域,硬件选型往往决定了项目的性能上限和开发效率。TB67H480FNG作为东芝新一代步进电机驱动芯片,与STMicroelectronics的STM32F411RE微控制器组合,形成了工业级运动控制…

2026/7/8 10:49:37 阅读更多 →
终极Unity资源编辑器:UABEA完整指南与快速入门教程

终极Unity资源编辑器:UABEA完整指南与快速入门教程

终极Unity资源编辑器:UABEA完整指南与快速入门教程 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA UABEA是一款功能强大的跨平台Unity Asset Bundle编辑器,专为游戏开发者和资源…

2026/7/8 10:45:31 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻