随笔 - 1133  文章 - 0 评论 - 19 阅读 - 20万
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

题目类型:并发

题目:按序打印

描述:请设计修改程序,以确保 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。

 

posted on   Sempron2800+  阅读(73)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 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
点击右上角即可分享
微信分享提示