我们提供了一个类:

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相关推荐

  1. LeetCode 多线程 1114. 按序打印

    1114. 按序打印 Ideas 并发执行问题是多线程要解决的经典问题,此题是典型的执行屏障问题,因此我们需要构造几把锁来确保执行顺序. 题目要求按顺序依次执行三个方法,为了保证线程的执行顺序,可以在 ...

  2. 【多线程】给三个字母a、l、i,采用多线程的方式打印alialialiali。。。

    目录 1. 题目 2. 解析 1. 使用ReetrankLock和Condition 1. 思路 2. 代码实现 3. 控制台 2. 使用synchronized和AtomicInteger配合 1. ...

  3. 1114. 按序打印

    1114. 按序打印 我们提供了一个类: public class Foo { public void first() { print("first"); } public voi ...

  4. 多线程和单线程 打印数字到100000 的速度对比

    import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.u ...

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

    编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是: 如果这个数字可以被 3 整除,输出 "fizz". 如果这个数字可以被 5 整除,输出 "buzz&q ...

  6. Java多线程学习二十七:AtomicInteger 在高并发下性能不好,如何解决?为什么?

    AtomicInteger 在高并发下性能不好,如何解决?以及为什么会出现这种情况? 我们知道在 JDK1.5 中新增了并发情况下使用的 Integer/Long 所对应的原子类 AtomicInte ...

  7. LeetCode 1114 按序打印

    https://leetcode-cn.com/problems/print-in-order/ 解决方案 class Foo {private AtomicInteger jobDone = new ...

  8. LeetCode 多线程 1115. 交替打印FooBar

    1115. 交替打印FooBar Ideas 交替锁的设计,两把锁,foo执行的时候把foo lock acquire,print完了只有把bar lock release,这样foo就得等着,然后b ...

  9. java基础---多线程之交替打印,等待唤醒机制

    对于交替打印的线程问题: 方法1:非标志方法 package com.exam_1; /* 定义一个线程A,输出1 - 10之间的整数,定义一个线程B,逆序输出1 - 10之间的整数(10)要求线程A ...

最新文章

  1. LeetCode Longest Increasing Subsequence(动态规划、二分法)
  2. SQL 2005 数据库备份还原
  3. 《.NET应用架构设计:原则、模式与实践》新书博客--试读-持续更新
  4. 【转】win32窗口的大小,居中,拖动
  5. oracle 会话 临时表,Oracle 学习系列之二(会话与事务级临时表)
  6. ivew 的ajax,iView-Upload组件分析
  7. matlab st变换,ST转换(matlab代码)
  8. java内存管理总结
  9. 软件开发人员的简历项目经验
  10. 将计算机设置成交换机主机名,各种交换机配置命令
  11. OFFICE文档转换到PDF的几种方法与转换效率和性能的简单比较
  12. 微软热招,一起定义未来的搜索引擎!
  13. Rayson API 框架分析系列之7: 注解处理器(APT)原理
  14. linux上挂载iso文件,如何在Linux上挂载ISO文件
  15. 高质量程序设计指南(笔记)
  16. Java中判断一句英文中有多少个以p开头的单词
  17. 人工智能产品普及的今天,软件测试人员也在自我进化
  18. [转载]实时 Java,第 5 部分: 编写和部署实时 Java 应用程序
  19. 如何找课题的综述文献
  20. 使用Python收发邮件

热门文章

  1. git add remote_最全的git常用命令(建议收藏)
  2. 现实地形导入UE4全流程
  3. php protobuf 二进制,PHP环境中使用ProtoBuf数据格式
  4. mysql查看事件任务内容_MySql事件计划任务
  5. 中职计算机属于专业课还是文化课,对中职计算机专业建设探讨.doc
  6. 【转】交织容积重建技术:基本原理与临床价值
  7. 【转】刨根究底正则表达式(2):文本查找方式的演化历史
  8. Sharepoin学习笔记—架构系列--04 Sharepoint的四种执行模型 1
  9. oracle存储过程行转列,oracle 存储过程-动态行转列,解决。
  10. python把矩阵堆叠成大矩阵_python numpy 矩阵堆叠实例