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

发布时间:2026/11/5 11:04:55

头歌实践教学平台: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/11/4 20:15:12

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

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

2026/11/4 21:39:56

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

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

2026/11/5 10:43:56

工业测温方案解析:ADS122U04与STM32F042K6的UART高精度RTD采集设计

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

2026/11/5 10:43:56

STM32L031+ADS122U04:UART接口24位ADC实现PT100高精度温度采集

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

2026/11/5 10:43:55

基于ADS122U04与MK24的HVAC高精度温度采集系统设计

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

2026/11/5 10:38:55

Univer开源Web Office引擎:Canvas渲染与协同编辑实战解析

第一次看到Univer这个项目名字的时候,我下意识以为是哪个海外团队用“University”做的教育类产品。直到我翻完它的仓库和在线Demo,才发现自己差点错过一个好东西——这是一个把“在线电子表格、文档、幻灯片”全部做成开源引擎的Web Office项目&#xf…

2026/11/5 10:38:55

Foxmail数字签名与加密配置全指南:S/MIME证书实战落地

1. 邮件签名与加密不是“加个水印”或“点个锁图标”那么简单很多人第一次在Foxmail里找“签名”功能,点开设置就以为万事大吉——填上姓名、电话、公司logo,保存退出,邮件发出去带个固定落款,就觉得“搞定”。等真遇到客户问“你…

2026/11/5 10:38:55

LVS负载均衡优化:FWM标记与持久化服务实践

1. 为什么需要优化LVS调度?在企业级负载均衡场景中,Linux Virtual Server(LVS)作为四层负载均衡的经典解决方案,其性能表现直接影响着整个业务系统的稳定性。但在实际生产环境中,我们常常会遇到两个典型问题…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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