头歌实践教学平台:Java高级特性-多线程基础(2)常用函数(三下)

发布时间:2026/9/15 7:01:38

头歌实践教学平台:Java高级特性-多线程基础(2)常用函数(三下) 第3关常用函数二纸上得来终觉浅欲知此事须躬行我们还是通过实例来学习这些函数的用法。问题建立两个线程A线程打印5次AB线程打印5次B要求线程同时运行交替打印5次AB。这个问题用Object的wait()notify()就可以很方便的解决。代码如下public class MyThread implements Runnable {private String name;private Object prev;private Object self;private MyThread(String name, Object prev, Object self) {this.name name;this.prev prev;this.self self;}public void run() {int count 5;while (count 0) {synchronized (prev) {synchronized (self) {System.out.print(name);count--;self.notify();}try {prev.wait();} catch (InterruptedException e) {e.printStackT\frace();}}}System.exit(0);//退出jvm}public static void main(String[] args) throws Exception {Object a new Object();Object b new Object();MyThread ta new MyThread(A, b, a);MyThread tb new MyThread(B, a, b);new Thread(ta).start();Thread.sleep(100); //确保按顺序A、B执行new Thread(tb).start();Thread.sleep(100);}}运行程序结果为ABABABABAB线程常用函数总结下表列出的是线程类常用的函数函数 描述public void start() 使该线程开始执行Java 虚拟机调用该线程的 run 方法。public void run() 如果该线程是使用独立的 Runnable 运行对象构造的则调用该 Runnable 对象的 run 方法否则该方法不执行任何操作并返回。public final void setName(String name) 改变线程名称使之与参数 name 相同。public final void setPriority(int priority) 更改线程的优先级。public final void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。public final void join(long millisec) 等待该线程终止的时间最长为 millis 毫秒public void interrupt() 中断线程。public final boolean isAlive() 测试线程是否处于活动状态。public static void yield() 暂停当前正在执行的线程对象并执行其他线程。public static void sleep(long millisec) 在指定的毫秒数内让当前正在执行的线程休眠暂停执行此操作受到系统计时器和调度程序精度和准确性的影响。public static boolean holdsLock(Object x) 当且仅当当前线程在指定的对象上保持监视器锁时才返回 true。public static Thread currentThread() 返回对当前正在执行的线程对象的引用。public static void dumpStack() 将当前线程的堆栈跟踪打印至标准错误流。编程要求请仔细阅读右侧代码根据方法内的提示在Begin - End区域内进行代码补充具体任务如下建立三个线程A线程打印5次EB线程打印5次DC线程打印5次U要求线程同时运行交替打印5次EDU。测试说明补充完代码后点击测评平台会对你编写的代码进行测试当你的结果与预期输出一致时即为通过。开始你的任务吧祝你成功package step3;public class MyThread implements Runnable {private String name; // 线程名称(E/D/U)private Object prev; // 前一个线程的锁private Object self; // 当前线程的锁private static final int COUNT 5; // 每个线程打印次数public MyThread(String name, Object prev, Object self) {this.name name;this.prev prev;this.self self;}Overridepublic void run() {int count COUNT;while (count 0) {synchronized (prev) { // 先获取前一个线程的锁synchronized (self) { // 再获取当前线程的锁System.out.print(name); // 打印字符count--;self.notify(); // 唤醒等待在self锁上的线程}try {if (count 0) // 最后一次打印后无需等待prev.wait(); // 释放prev锁并等待唤醒} catch (InterruptedException e) {e.printStackTrace();}}}// 最后一个线程打印完毕后唤醒所有等待线程以确保程序退出synchronized (self) {self.notify();}}public static void main(String[] args) throws Exception {Object e new Object();Object d new Object();Object u new Object();Thread threadE new Thread(new MyThread(E, u, e));Thread threadD new Thread(new MyThread(D, e, d));Thread threadU new Thread(new MyThread(U, d, u));// 启动顺序E - D - UthreadE.start();Thread.sleep(100); // 确保E先启动threadD.start();Thread.sleep(100); // 确保D接着启动threadU.start();// 等待所有线程执行完毕threadE.join();threadD.join();threadU.join();}}有任何问题都可以随时关注私信
延伸阅读

更多相关文章

2026/9/15 6:56:38

AI编程助手协同配置:Claude+Router+DeepSeek实战

1. 项目背景与核心价值去年在搭建智能开发环境时,我尝试将多个AI编程助手整合到工作流中。经过三个月的迭代测试,最终形成了这套基于Claude Code、Router和DeepSeek的协同配置方案。这种组合最大的优势在于:Claude Code擅长代码补全和语法检查…

2026/9/15 6:56:38

BEVFormer:端到端空间建模的自动驾驶感知范式

1. 为什么BEVFormer不是“又一个Transformer变体”,而是自动驾驶感知范式的分水岭BEVFormer这个词最近在自动驾驶算法圈里几乎成了高频词,但很多人一看到“Former”就下意识归类为“Transformer的又一个分支”,甚至直接跳到代码复现环节——结…

2026/9/15 7:16:38

AI代码工具稳定性五大硬指标与工程实践

1. 这不是“选模型”而是“建稳态”:为什么AI代码工具的稳定性比生成能力更致命? 你有没有过这样的经历:凌晨两点,一个关键接口要上线,你用AI工具生成的代码片段在本地跑通了,但一上测试环境就报错&#x…

2026/9/15 7:16:38

外贸网络营销策划方案制定:告别模板丑站,3招搞定建站报价与转化

外贸网络营销策划方案制定:告别模板丑站,3招搞定建站报价与转化 做外贸独立站,最让人头疼的不是代码写不出来,而是做出来的东西“拿不出手”。很多老板拿着几千块做的模板站去谈客户,结果客户连点开的欲望都没有。那种千篇一律的布局、刺眼的配色,加上…

2026/9/15 7:16:38

AI生成内容识别与降AI率工具对比分析

1. 为什么我们需要关注AI生成内容的识别问题最近两年,AI生成内容(AIGC)呈现爆发式增长。根据斯坦福大学2023年AI指数报告,全球每天产生的AI生成文本已超过100亿字。这种爆炸式增长带来一个严峻问题:如何区分人类创作和…

2026/9/15 7:16:38

三维点云处理中PCA技术的原理与应用

1. 三维点云处理中的PCA技术解析在三维视觉和机器人领域,点云数据正成为环境感知的核心载体。当我们通过激光雷达或多目相机获取物体表面数以万计的空间点坐标时,如何从这些看似无序的数据中提取有价值的结构信息?主成分分析(PCA&…

2026/9/15 7:11:38

Fragment回退栈管理实战:原理、踩坑与工程化策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/15 4:54:30

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/15 0:01:16

AI英语单词APP开发:自适应学习算法与移动端优化实践

1. 项目概述 作为一名在移动应用开发领域摸爬滚打多年的老手,我最近完成了一个AI英语单词APP的开发项目。这个项目将传统单词记忆方法与现代AI技术相结合,打造了一款能够智能适应不同用户学习习惯的英语学习工具。 市面上大多数单词APP都存在一个通病&a…

2026/9/15 0:01:16

Flutter与OpenHarmony结合开发手语学习APP实战

1. 项目背景与核心价值作为一名同时接触过Flutter和OpenHarmony的开发者,最近我完成了一个基于Flutter for OpenHarmony的手语学习APP实战项目。这个项目最大的特点在于实现了跨平台框架与国产操作系统深度结合的创新实践——用Flutter开发的应用能完美运行在OpenHa…

2026/9/15 0:01:16

六个月成为机器人工程师:从ROS2到SLAM的实战路径

1. 六个月的紧迫感从哪来:先搞清楚你要成为哪种机器人工程师说实话,六个月的期限并不是一个宽松的时间线。市面上任何一本正经的机器人学教材都超过五百页,ROS2的官方文档可以翻到你怀疑人生,再加上ABB、KUKA这些工业机器人厂家动…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码