(多线程)leetcode1114. 按序打印 认识AtomicInteger

我们提供了一个类:

public class Foo {
  public void one() { print("one"); }
  public void two() { print("two"); }
  public void three() { print("three"); }
}
三个不同的线程将会共用一个 Foo 实例。

线程 A 将会调用 one() 方法
线程 B 将会调用 two() 方法
线程 C 将会调用 three() 方法
请设计修改程序,以确保 two() 方法在 one() 方法之后被执行,three() 方法在 two() 方法之后被执行。

 

示例 1:

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

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

注意:

尽管输入中的数字似乎暗示了顺序,但是我们并不保证线程在操作系统中的调度顺序。

你看到的输入格式主要是为了确保测试的全面性。

first:直接执行。执行完以后将标记设为1

second:等到标记为1时执行,执行完之后把标记设为2

third:等到标记为2时执行。

Java中AtomicInteger类提供线程安全的int类型操作,具体自己查。

class Foo {private AtomicInteger done = new AtomicInteger(0);public Foo() {}public void first(Runnable printFirst) throws InterruptedException {printFirst.run();done.set(1);}public void second(Runnable printSecond) throws InterruptedException {while (done.get() != 1);printSecond.run();done.set(2);}public void third(Runnable printThird) throws InterruptedException {while (done.get() != 2);printThird.run();}
}

 

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

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

相关文章

李牛(Linux)

20:用户和用户组管理 引言: 新思维1:用户?用户是什么?能不能吃?好吃不!哈哈 不开玩笑了 我们平常接触的用户就是window系统下的用户 用户名叫啥来着 哦 user 但是对于Windows操作系统来说 好像…

(多线程)leetcode1115. 交替打印FooBar 记得Thread.yield();

我们提供一个类&#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"); } } } 两个不同的线程将会共用…

Date类(日期时间类)219

219节课堂笔记 1.概述&#xff1a;表示特定的时间 2.所在的类&#xff1a;java.util.Date(表示时间和日期的类) 类date标识特定的瞬间&#xff0c;精确到毫秒 3.毫秒的换算&#xff1a;1秒1000毫秒 tips&#xff1a;不可以认为是1秒等于60毫秒&#xff0c;与时钟换算是不一样的…

(多线程)leetcode1116. 打印零与奇偶数

假设有这么一个类&#xff1a; class ZeroEvenOdd { public ZeroEvenOdd(int n) { ... } // 构造函数 public void zero(printNumber) { ... } // 仅打印出 0 public void even(printNumber) { ... } // 仅打印出 偶数 public void odd(printNumber) { ... } …

Date类的构造方法以及成员方法220

220&#xff1a;date类的构造方法以及成员方法 /** date类的构造方法以及成员方法date 2020年4月27日上午10:41:59 / import java.util.Date;//注意进行类包的调用 public class zixuejava { public static void main(String[] args) { // TODO Auto-generated method stub de…

(多线程)leetcode1117. H2O 生成 认识Java中的PV原语

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

首元节点

线性表的链式表示和实现&#xff1a; 1.区分一个概念&#xff1a;头结点 头指针 首元节点 首元节点&#xff1a;就是线性表&#xff08;这里为什么说是线性表&#xff0c;而不说是链表呢&#xff1f;因为我们先来讲清楚首元节点的概念&#xff0c;不涉及指针&#xff09;当中第…

(多线程)leetcode1195. 交替打印字符串 最简单解法一个变量搞定

编写一个可以从 1 到 n 输出代表这个数字的字符串的程序&#xff0c;但是&#xff1a; 如果这个数字可以被 3 整除&#xff0c;输出 "fizz"。 如果这个数字可以被 5 整除&#xff0c;输出 "buzz"。 如果这个数字可以同时被 3 和 5 整除&#xff0c;输出 &…

MYSQ产品

前言&#xff1a;MySQL数据库&#xff0c;隶属于MySQLAB公司&#xff0c;总部位于瑞典&#xff0c;后被Oracle收购 MySQLAB公司是由monky及他的两位好朋友创建的&#xff0c;先是被sun公司收购然后被偶尔甲骨文公司收购 MySQL的优点&#xff1a; 1.它的成本是比较低的&#xff…

处理百万级以上的数据提高查询速度的方法

1.应尽量避免在where子句中使用!或<>操作符&#xff0c;否则将引擎放弃使用索引而进行全表扫描。2.对查询进行优化&#xff0c;应尽量避免全表扫描&#xff0c;首先应考虑在where及orderby涉及的列上建立索引。3.应尽量避免在where子句中对字段进行null值判断&#xff0c…

leetcode三道shell题

给定一个文本文件 file.txt&#xff0c;请只打印这个文件中的第十行。 示例: 假设 file.txt 有如下内容&#xff1a; Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10 你的脚本应当显示第十行&#xff1a; Line 10 sed -n 10p file.txt 给定一个…

DateFormat(炸窝)

222&#xff1a;DateFormat方法的使用以及功能&#xff1a; java.text.DateFormat是日期或者时间格式化子类的抽象类&#xff0c;作用&#xff1a;可以帮我们完成日期和文本之间的转换&#xff0c;也就是可以在Date对象与String对象之间进行来回转换 格式化&#xff1a; 按照指…

剑指offer:3-7记录

找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0&#xff5e;n-1 的范围内。数组中某些数字是重复的&#xff0c;但不知道有几个数字重复了&#xff0c;也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1&#xff1a; 输入&#…

计算一个人出生了多少天(炸窝)

223&#xff1a; 小小练习&#xff1a; 请使用日期API来计算一个人出生了多少天&#xff1f; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class zixuejava { public static void main(Str…

剑指offer:8-11记录

用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 ) 示例 1&#xff1a; 输入&#xff1a; ["…

mysql命令

Mysql常见的命令总结&#xff1a; mysql服务的退出以及登陆 方式一&#xff1a;通过mysql自带的客户端&#xff0c;只限于root用户 方式二&#xff1a;通过Windows自带的客户端&#xff0c; 登陆&#xff1a;mysql -uroot -p&#xff1b; 退出&#xff1a;exit或者是ctrlc&am…

leetcode343. 整数拆分

给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 36。 思路&#xff1a;动态规…

尚硅谷李老师Mysql基础笔记

数据库的相关概念 一&#xff1a;数据库的好处 1.可以持久化数据到本地 2.结构化查询 二&#xff1a;数据库的常见概念 1.DB&#xff1a;数据库&#xff0c;存储数据的容器 2.DBMS:数据库管理系统&#xff0c;又称为数据库软件或数据库产品&#xff0c;用于创建或者管理数据&…

剑指offer:12-17记录

请设计一个函数&#xff0c;用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始&#xff0c;每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格&#xff0c;那么该路径不能再次进入该格子。例如&#xf…

剑指offer:18-21记录

给定单向链表的头指针和一个要删除的节点的值&#xff0c;定义一个函数删除该节点。 返回删除后的链表的头节点。 注意&#xff1a;此题对比原题有改动 示例 1: 输入: head [4,5,1,9], val 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点&#xff0c;那么在调用…