当前位置: 首页 > news >正文

1114. 按序打印

1114. 按序打印

题目描述

我们提供了一个类:

public class Foo {
  public void first() { print("first"); }
  public void second() { print("second"); }
  public void third() { print("third"); }
}

三个不同的线程 A、B、C 将会共用一个 Foo 实例。

  • 一个将会调用 first() 方法
  • 一个将会调用 second() 方法
  • 还有一个将会调用 third() 方法

请设计修改程序,以确保 second() 方法在 first() 方法之后被执行,third() 方法在 second() 方法之后被执行。

 

示例 1:

输入: [1,2,3]
输出: "firstsecondthird"
解释: 
有三个线程会被异步启动。
输入 [1,2,3] 表示线程 A 将会调用 first() 方法,线程 B 将会调用 second() 方法,线程 C 将会调用 third() 方法。
正确的输出是 "firstsecondthird"。

示例 2:

输入: [1,3,2]
输出: "firstsecondthird"
解释: 
输入 [1,3,2] 表示线程 A 将会调用 first() 方法,线程 B 将会调用 third() 方法,线程 C 将会调用 second() 方法。
正确的输出是 "firstsecondthird"。

 

提示:

  • 尽管输入中的数字似乎暗示了顺序,但是我们并不保证线程在操作系统中的调度顺序。
  • 你看到的输入格式主要是为了确保测试的全面性。

解法

JAVA

/**// 使用类锁 - 同一时间只有一个线程能执行Foo foo1 = new Foo();Foo foo2 = new Foo();// foo1 和 foo2 的同步方法会互相阻塞// 使用实例锁 - 不同实例可以并发执行Foo foo1 = new Foo();Foo foo2 = new Foo();// foo1 和 foo2 的同步方法可以同时执行*/
class Foo {private int cur = 1;public Foo() {}public void first(Runnable printFirst) throws InterruptedException {synchronized(Foo.class) {while(cur != 1) {Foo.class.wait();}// printFirst.run() outputs "first". Do not change or remove this line.printFirst.run();cur++;Foo.class.notifyAll();}}public void second(Runnable printSecond) throws InterruptedException {synchronized(Foo.class) {while(cur != 2) {Foo.class.wait();}// printSecond.run() outputs "second". Do not change or remove this line.printSecond.run();cur++;Foo.class.notifyAll();}}public void third(Runnable printThird) throws InterruptedException {synchronized(Foo.class) {while(cur != 3) {Foo.class.wait();}// printThird.run() outputs "third". Do not change or remove this line.printThird.run();cur++;Foo.class.notifyAll();}}
}

Java

class Foo {private int cur = 1;private final Lock lock = new ReentrantLock();private final Condition condition = lock.newCondition();public Foo() {}public void first(Runnable printFirst) throws InterruptedException {lock.lock();try {while (cur != 1) {condition.await();}printFirst.run();cur = 2;condition.signalAll();} finally {lock.unlock();}}public void second(Runnable printSecond) throws InterruptedException {lock.lock();try {while (cur != 2) {condition.await();}printSecond.run();cur = 3;condition.signalAll();} finally {lock.unlock();}}public void third(Runnable printThird) throws InterruptedException {lock.lock();try {while (cur != 3) {condition.await();}printThird.run();cur = 1;condition.signalAll();} finally {lock.unlock();}}
}

...


http://www.zskr.cn/news/27092.html

相关文章:

  • C# Avalonia 16- Animation- SampleViewer - ReusableFollowExample
  • 2025年五金零件加工厂家权威推荐榜:精密零件/小五金加工/五金精密零件加工专业实力与品质保障精选指南
  • 2025年10月deepseek排名优化推荐:高性价比解决方案市场报告
  • 评测阿里云 RDS for MySQL + DuckDB 架构:QuickBI 分析性能与兼容性实测
  • 大模型后训练
  • jq工具解析JSON数据操作示例
  • 技术面:Spring(循环依赖,spring与springboot的区别)
  • 2025年10月长白山度假酒店推荐:性价比与景观体验排行
  • 2025 年最新推荐!景观石厂家推荐排行榜,涵盖千层石 / 泰山石 / 鹅卵石等多品类,全方位解析优质品牌助您精准选择
  • 基于分类器AUC的无模型变点检测技术
  • 2025 年高强钢板厂家最新推荐排行榜:涵盖宝武 / 合金 / Q550D 等热门型号,优质企业综合实力甄选
  • 2025年10月中国AI关键词排名优化公司排行:五强实测评价
  • 2025 年铝板厂家最新推荐榜:聚焦优质铝板企业,为工业与建筑采购提供专业参考1100/3003/3004/5052/5083/ 6061铝板厂家推荐
  • 2025 年不锈钢板厂家最新推荐榜:精选优质 304/316L/310S 等材质厂家,助力企业高效采购规避劣质产品
  • 2025 年轻质抹灰石膏厂家最新推荐排行榜:实力企业全方位评测,含砂浆 / 耐水 / 高强耐水 / 底层 / 找平 / 抗裂 / 隔音类型产品优质厂家
  • 2025年北京市盈科律所:全球规模蝉联第一深度解析
  • 2025 年丝杆升降机厂家最新推荐榜单:聚焦行业优质企业,深度解析各品牌核心优势与选择要点滚珠/螺旋/伞齿轮/蜗轮丝杆升降机厂家推荐
  • 2025年烘干机厂家权威推荐榜:印染烘干机专业制造商,高效节能与稳定性能深度解析
  • 数据处理:取两位有效数字,运算,焦点事件,只允许填写数字(2025.10.12)
  • 2025年市面上碳晶板品牌口碑排行榜前十名推荐
  • 2025 年最新推荐!国内冷库厂家实力排行榜揭晓,含冷冻 / 保鲜 / 超低温等多类型冷库优质企业
  • 想做测开,是学Java还是Python?
  • 2025 年电缆桥架源头厂家最新推荐排行榜,聚焦规模、技术与市场影响力精选优质企业涵盖多类型桥架
  • 2025年市面上高杆灯品牌前十强终极选购指南
  • 2025年市面上高杆灯品牌排行榜前十名及选购指南
  • 2025年移动泵车厂家推荐排行榜,防汛泵车,水泵机组,应急排水泵车,柴油机水泵机组公司精选
  • 2025 年桥梁护栏厂家最新推荐排行榜:聚焦安全防护与耐用性能的优质企业实力甄选指南立柱式 / 网式 / 板式 / 景观 / 不锈钢桥梁护栏厂家推荐
  • 2025年废气治理/处理设备厂家权威推荐榜:专业技术与高效解决方案深度解析
  • 2025 年通风气楼厂家最新推荐排行榜:权威筛选通风气楼厂家,聚焦自然 / 屋顶 / 工业 / 电动 / 采光 / 钢结构 / 厂房 / 车间 / 开敞式 / 薄型通风气楼公司
  • 2025 年国内铅门生产厂家最新推荐排行榜:聚焦防辐射 / 手术室 / CT 室等场景精选优质品牌