news 2026/5/25 21:29:50

LeetCode 1114. 按序打印

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 1114. 按序打印

目录

LeetCode 1114. 按序打印:多线程顺序控制的核心逻辑(附完整代码)

一、题目核心需求

二、解题核心思路:锁 + 标志位 + 线程通信

三、完整代码实现

四、关键知识点总结


LeetCode 1114. 按序打印:多线程顺序控制的核心逻辑(附完整代码)

最近练习了 LeetCode 的「按序打印」问题,正好借此梳理多线程顺序控制的核心思路 —— 这是并发编程的基础考点,分享给刚学 JUC 的朋友~

一、题目核心需求

实现一个Foo类,让三个线程分别调用first()second()third()严格按first→second→third的顺序打印(即使线程启动顺序打乱)。

二、解题核心思路:锁 + 标志位 + 线程通信

要让多线程按固定顺序执行,核心是 **“控制前置方法的执行状态”**,这里用「synchronized锁 + 布尔标志位 +wait/notifyAll通信」实现:

  1. 标志位:用firsttestsecondtest标记 “前序方法是否执行完成”;
  2. 专属锁对象:创建private final Object lock作为同步锁(避免外部干扰);
  3. 线程通信:用lock.wait()让线程等待(释放锁),lock.notifyAll()唤醒后续线程。

三、完整代码实现

class Foo { // 标志位:标记前序方法是否执行完成 private boolean firsttest = false; private boolean secondtest = false; // 专属锁对象:保证锁的封闭性和唯一性 private final Object lock = new Object(); public Foo() { } public void first(Runnable printFirst) throws InterruptedException { synchronized (lock) { // 执行first逻辑 printFirst.run(); // 标记first已完成 firsttest = true; // 唤醒等待lock的线程(second/third) lock.notifyAll(); } } public void second(Runnable printSecond) throws InterruptedException { synchronized (lock) { // 循环等待:直到first执行完成(防止虚假唤醒) while (!firsttest) { lock.wait(); } // 执行second逻辑 printSecond.run(); // 标记second已完成 secondtest = true; // 唤醒等待lock的线程(third) lock.notifyAll(); } } public void third(Runnable printThird) throws InterruptedException { synchronized (lock) { // 循环等待:直到second执行完成 while (!secondtest) { lock.wait(); } // 执行third逻辑 printThird.run(); } } }

四、关键知识点总结

  1. 专属锁对象的设计private final Object lock而不是this

    • private:避免外部代码滥用锁;
    • final:防止锁对象被意外替换;
    • Object:轻量化,仅用其 “对象身份” 做锁。
  2. 为什么用while而不是if判断标志位?防止虚假唤醒(线程可能无原因被唤醒),while会二次检查标志位,确保只有前序方法执行完才继续。

  3. wait/notifyAll的作用

    • lock.wait():释放锁,让前序线程执行;
    • lock.notifyAll():唤醒所有等待该锁的线程,传递 “前序已完成” 的信号。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 1:00:06

视频缺了BGM总觉单调?这些免费配乐让你的画面瞬间拥有情绪

《2025年视听内容情绪感知与音乐影响研究报告》证实:合适的背景音乐能将观众对视频内容的情感共鸣强度提升近70%,且信息记忆留存率提高超过五成。当你的视频只有画面和对白时,那种情感维度的单薄感就像看无声电影——情节清晰可见&#xff0c…

作者头像 李华
网站建设 2026/5/25 3:52:15

怎么在线压缩图片大小?在线压缩图片大小教程

日常办公传文件、社交平台发照片、网站上传素材时,图片体积过大往往会带来诸多困扰 —— 传输耗时久、上传受限制、占用存储空间多。其实,借助专业的在线图片处理工具,无需安装软件,就能快速优化图片大小,还能最大程度…

作者头像 李华
网站建设 2026/5/25 15:47:05

100+套大数据可视化大屏模板集合

100套大数据可视化模板 今天给大家分享一个开源的大数据可视化大屏模板集合,包含100多套行业级的大数据可视化HTML5模板。该项目由iGaoWei收集整理并开源分享,涵盖了政务、交通、金融、医疗、教育等多个行业领域,为开发者提供了丰富的大数据…

作者头像 李华
网站建设 2026/5/25 9:53:39

从需求到落地的全记录:如何找到靠谱的文化墙设计定制服务

上个月,公司老板把一面空荡荡的走廊白墙交给我,丢下一句:“把它做成能体现我们企业灵魂的文化墙,要专业,要有气势,预算要合理月底我要看到效果。“那一刻,我整个人是的。文化墙?不就是贴点海报和标语吗?但…

作者头像 李华
网站建设 2026/5/26 4:27:50

基于微信小程序公司企业小程序设计与实现作品

博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注网站制作、小程序开发、软件开发和大学生毕业设计教育、辅导。 所有项目都配有从入门到…

作者头像 李华
网站建设 2026/5/25 6:04:57

10个高效降AI率工具,继续教育人群必备神器

10个高效降AI率工具,继续教育人群必备神器 AI降重工具:高效应对AIGC率与查重挑战 在继续教育的学术道路上,论文写作不仅是知识的体现,更是对个人能力的综合考验。然而,随着AI技术的广泛应用,许多学生在使用…

作者头像 李华