题目类型:并发
题目:按序打印
描述:请设计修改程序,以确保 second() 方法在 first() 方法之后被执行,third() 方法在 second() 方法之后被执行。
1 class Foo { 2 private int t = 0; 3 4 public Foo() { 5 6 } 7 8 public synchronized void first(Runnable printFirst) throws InterruptedException { 9 while (t != 0) { 10 this.wait(); 11 } 12 // printFirst.run() outputs "first". Do not change or remove this line. 13 printFirst.run(); 14 t++; 15 this.notifyAll(); 16 } 17 18 public synchronized void second(Runnable printSecond) throws InterruptedException { 19 while (t != 1) { 20 this.wait(); 21 } 22 // printSecond.run() outputs "second". Do not change or remove this line. 23 printSecond.run(); 24 t++; 25 this.notifyAll(); 26 } 27 28 public synchronized void third(Runnable printThird) throws InterruptedException { 29 while (t != 2) { 30 this.wait(); 31 } 32 // printThird.run() outputs "third". Do not change or remove this line. 33 printThird.run(); 34 t++; 35 this.notifyAll(); 36 } 37 }
思路:使用线程同步。定义变量t,
first()需要在t为0时才能被线程执行,执行后将t自增1,修改为1。
second()需要在t为1时才能被线程执行,执行后将t自增1,修改为2。
third()需要在t为2时才能被线程执行,执行后将t自增1。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Sdcb Chats 技术博客:数据库 ID 选型的曲折之路 - 从 Guid 到自增 ID,再到
· 语音处理 开源项目 EchoSharp
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 使用 Dify + LLM 构建精确任务处理应用
2019-02-05 leetcode988
2019-02-05 leetcode987
2019-02-05 leetcode986