(多线程)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();}
}
(多线程)leetcode1114. 按序打印 认识AtomicInteger相关推荐
- LeetCode 多线程 1114. 按序打印
1114. 按序打印 Ideas 并发执行问题是多线程要解决的经典问题,此题是典型的执行屏障问题,因此我们需要构造几把锁来确保执行顺序. 题目要求按顺序依次执行三个方法,为了保证线程的执行顺序,可以在 ...
- 【多线程】给三个字母a、l、i,采用多线程的方式打印alialialiali。。。
目录 1. 题目 2. 解析 1. 使用ReetrankLock和Condition 1. 思路 2. 代码实现 3. 控制台 2. 使用synchronized和AtomicInteger配合 1. ...
- 1114. 按序打印
1114. 按序打印 我们提供了一个类: public class Foo { public void first() { print("first"); } public voi ...
- 多线程和单线程 打印数字到100000 的速度对比
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.u ...
- (多线程)leetcode1195. 交替打印字符串 最简单解法一个变量搞定
编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是: 如果这个数字可以被 3 整除,输出 "fizz". 如果这个数字可以被 5 整除,输出 "buzz&q ...
- Java多线程学习二十七:AtomicInteger 在高并发下性能不好,如何解决?为什么?
AtomicInteger 在高并发下性能不好,如何解决?以及为什么会出现这种情况? 我们知道在 JDK1.5 中新增了并发情况下使用的 Integer/Long 所对应的原子类 AtomicInte ...
- LeetCode 1114 按序打印
https://leetcode-cn.com/problems/print-in-order/ 解决方案 class Foo {private AtomicInteger jobDone = new ...
- LeetCode 多线程 1115. 交替打印FooBar
1115. 交替打印FooBar Ideas 交替锁的设计,两把锁,foo执行的时候把foo lock acquire,print完了只有把bar lock release,这样foo就得等着,然后b ...
- java基础---多线程之交替打印,等待唤醒机制
对于交替打印的线程问题: 方法1:非标志方法 package com.exam_1; /* 定义一个线程A,输出1 - 10之间的整数,定义一个线程B,逆序输出1 - 10之间的整数(10)要求线程A ...
最新文章
- LeetCode Longest Increasing Subsequence(动态规划、二分法)
- SQL 2005 数据库备份还原
- 《.NET应用架构设计:原则、模式与实践》新书博客--试读-持续更新
- 【转】win32窗口的大小,居中,拖动
- oracle 会话 临时表,Oracle 学习系列之二(会话与事务级临时表)
- ivew 的ajax,iView-Upload组件分析
- matlab st变换,ST转换(matlab代码)
- java内存管理总结
- 软件开发人员的简历项目经验
- 将计算机设置成交换机主机名,各种交换机配置命令
- OFFICE文档转换到PDF的几种方法与转换效率和性能的简单比较
- 微软热招,一起定义未来的搜索引擎!
- Rayson API 框架分析系列之7: 注解处理器(APT)原理
- linux上挂载iso文件,如何在Linux上挂载ISO文件
- 高质量程序设计指南(笔记)
- Java中判断一句英文中有多少个以p开头的单词
- 人工智能产品普及的今天,软件测试人员也在自我进化
- [转载]实时 Java,第 5 部分: 编写和部署实时 Java 应用程序
- 如何找课题的综述文献
- 使用Python收发邮件
热门文章
- git add remote_最全的git常用命令(建议收藏)
- 现实地形导入UE4全流程
- php protobuf 二进制,PHP环境中使用ProtoBuf数据格式
- mysql查看事件任务内容_MySql事件计划任务
- 中职计算机属于专业课还是文化课,对中职计算机专业建设探讨.doc
- 【转】交织容积重建技术:基本原理与临床价值
- 【转】刨根究底正则表达式(2):文本查找方式的演化历史
- Sharepoin学习笔记—架构系列--04 Sharepoint的四种执行模型 1
- oracle存储过程行转列,oracle 存储过程-动态行转列,解决。
- python把矩阵堆叠成大矩阵_python numpy 矩阵堆叠实例