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”。

解题思路

简单使用信号量,完成有序运行

代码

class Foo {Semaphore f=new Semaphore(1);Semaphore s=new Semaphore(0);Semaphore t=new Semaphore(0);public Foo() {}public void first(Runnable printFirst) throws InterruptedException {f.acquire();// printFirst.run() outputs "first". Do not change or remove this line.printFirst.run();s.release();}public void second(Runnable printSecond) throws InterruptedException {s.acquire();// printSecond.run() outputs "second". Do not change or remove this line.printSecond.run();t.release();}public void third(Runnable printThird) throws InterruptedException {t.acquire();// printThird.run() outputs "third". Do not change or remove this line.printThird.run();f.release();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018年应用交付控制器市场将发生重大变化

应用交付控制器(ADC)一直以来都是基础设施的关键部分。它们位于应用程序和基础架构之间,是唯一可以同时使用应用程序和网络语言的技术。IT行业正在经历一个快速的现代化进程,包含诸如软件定义的网络、云、容器等其他计划对基础设施…

如何测试一个水杯

关于一个水杯如何测试?这个被认为是测试界最为经验的面试题了,下面是我的回答思路: 对于一个软件的测试,重点是测试的思路以及测试的全面性的体现。 软件测试应该先重点再次重点,对于软件而言重点自然在于功能测试&…

1115. 交替打印FooBar

1115. 交替打印FooBar 我们提供一个类&#xff1a; class FooBar {public void foo() {for (int i 0; i < n; i) {print("foo");}}public void bar() {for (int i 0; i < n; i) {print("bar");}} }两个不同的线程将会共用一个 FooBar 实例。其中…

IntelliJ IDEA 运行 Maven 项目

1.官方文档说IntelliJ IDEA已经自身集成了maven&#xff0c;则不用劳心去下载maven 2.导入一个程序&#xff0c;看是否是maven程序的关键在于工程之中有没有pom.xml这个文件&#xff0c;比如这里 3.为这个工程配置好服务器3.1 点击“Edit Configurations”3.2 进入Run/Debug C…

资深老鸟整理,Java接口自动化测试总结,从0到1自动化...

这几年接口自动化变得越来越热门&#xff0c;相对比于UI自动化&#xff0c;接口自动化有一些优势 1&#xff09;运行比UI更稳定&#xff0c;让BUG更容易定位 2&#xff09;UI自动化维护成本太高&#xff0c;接口相对低一些 接口测试其实有很多方式&#xff0c;主要有两种&…

parcel react_如何使用Parcel设置React应用

parcel reactFor a long time Webpack was one of the biggest barriers-to-entry for someone wanting to learn React. Theres a lot of boilerplate configuration that can be confusing, especially if youre new to React. 长期以来&#xff0c; Webpack一直是想要学习Re…

1117. H2O 生成

1117. H2O 生成 现在有两种线程&#xff0c;氧 oxygen 和氢 hydrogen&#xff0c;你的目标是组织这两种线程来产生水分子。 存在一个屏障&#xff08;barrier&#xff09;使得每个线程必须等候直到一个完整水分子能够被产生出来。 氢和氧线程会被分别给予 releaseHydrogen 和…

pdf 字体和图片抽取

2019独角兽企业重金招聘Python工程师标准>>> #安装mutoos sudo apt-get install mupdf-tools #抽取字体 mutool extract LTN20180531052_C.pdf 转载于:https://my.oschina.net/colin86/blog/1842412

推箱子2-向右推!_保持冷静,砍箱子-银行

推箱子2-向右推!Hack The Box (HTB) is an online platform allowing you to test your penetration testing skills. It contains several challenges that are constantly updated. Some of them are simulating real world scenarios and some of them lean more towards a …

611. 有效三角形的个数

611. 有效三角形的个数 给定一个包含非负整数的数组&#xff0c;你的任务是统计其中可以组成三角形三条边的三元组个数。 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3注意: 数组长度不超过1000。数组里整数的范…

python学习day04

一&#xff1a;今天是一个学习列表后的实践训练 购物小程序&#xff1a; #codeing:UTF-8 #__author__:Duke #date:2018/3/1/001product_list [(mac,7000),(bike,1000),(phone,2000),(kindle,800),(iwatch,3000), ]; shopping_car []; saving input("please input your …

mybatis多产数_freeCodeCamp杰出贡献者–我们如何选择,认可和奖励多产的志愿者

mybatis多产数freeCodeCamp.org is only possible thanks to the thousands of contributors around the world who help expand and improve the community. They do this mainly through:感谢全球各地成千上万的贡献者&#xff0c;他们致力于扩大和改善社区&#xff0c;因此f…

502. IPO

502. IPO 假设 力扣&#xff08;LeetCode&#xff09;即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司&#xff0c;力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限&#xff0c;它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个…

记一次打包的诡异现象

一、前情提要&#xff1a; 今天线上打包&#xff0c;发现启动正常&#xff0c;但是访问异常&#xff0c;看日志也没有打印出什么异常信息。 更新的微服务包访问的时候一直报出【403】&#xff0c;访问被拒 项目架构&#xff1a;springBoot maven 二、机缘巧合&#xff1a; 上午…

转载:mysql存储过程讲解

记录MYSQL存储过程中的关键语法&#xff1a; DELIMITER // 声明语句结束符&#xff0c;用于区分; CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存储过程 BEGIN …. END 存储过程开始和结束符号 SET p_in1 变量赋值 DECLARE l_int int unsigned default 4000000; 变…

Diffie-Hellman:安全网络通信背后的天才算法

Lets start with a quick thought experiment.让我们从快速思考实验开始。 You have a network of 3 computers, used by Alice, Bob, and Charlie. All 3 participants can send messages, but just in a way that all other clients who connected to the network can read …

扫盲丨关于区块链你需要了解的所有概念

扫盲丨关于区块链你需要了解的所有概念 如今存储信息的方式有什么问题&#xff1f; 目前&#xff0c;支配我们生活的数据大部分都储存在一个地方&#xff0c;不论是在私人服务器、云、图书馆或档案馆的纸上。大多数情况下这很好&#xff0c;但这也容易受到攻击。 最近有消息称&…

SpringBoot环境切换

2019独角兽企业重金招聘Python工程师标准>>> 1.在application.yml中配置&#xff0c;如果java -jar banke-boot-bd-api-0.0.1-SNAPSHOT.jar&#xff0c;那么就是已application-test作为启动的配置文件启动 spring: profiles: active: test 2.如果java -jar banke-bo…

linux tar cvf_Linux中的Tar命令:Tar CVF和Tar XVF通过示例命令进行了解释

linux tar cvfThe name tar is, by most accounts, short for tape archive. The "tapes" in question would be all those magnetic storage drives that were popular all the way back in the 1950s. 在大多数情况下&#xff0c; tar是磁带归档的缩写。 有问题的“…

1894. 找到需要补充粉笔的学生编号

1894. 找到需要补充粉笔的学生编号 一个班级里有 n 个学生&#xff0c;编号为 0 到 n - 1 。每个学生会依次回答问题&#xff0c;编号为 0 的学生先回答&#xff0c;然后是编号为 1 的学生&#xff0c;以此类推&#xff0c;直到编号为 n - 1 的学生&#xff0c;然后老师会重复…