前提

今天下班时候和同事聊天偶然听到面试题“两个线程交替打印奇数和偶数”的实现,这里做一个复盘。

复盘

  • 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视器实现。
  • 场景二:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用JDK提供的并发类库实现。

这两个场景中,场景一是一种比较古老的同步方式,本质由JVM实现;场景二是JDK1.5引入JUC包之后简化了并发编程的前提下的更简便的实现。下面针对两个场景做对应的实现。

场景一

场景一中,线程A和线程B交替打印奇数和偶数,使用对象监视器实现,通俗来说:线程A或线程B只要有一者竞争锁成功,就打印++i,通知其他线程从等待集合中释放,然后自身线程加入等待集合并且释放锁即可。

public class OddEvenPrinter { private final Object monitor = new Object(); private final int limit; private volatile int count; public OddEvenPrinter(int limit, int initCount) { this.limit = limit; this.count = initCount; } public void print() { synchronized (monitor) { while (count < limit) { try { System.out.println(String.format("线程[%s]打印数字:%d

线程打印_经典面试题——两个线程交替打印奇数和偶数相关推荐

  1. c语言两个线程交替打印奇数和偶数,经典面试题——两个线程交替打印奇数和偶数...

    今天在和同事讨论线程说到了这个我就实现了一把 直接贴代码 public class Demo2 { private static volatile int i = 1; public static v ...

  2. 【Java】线程通信的例子:用两个线程打印 1-100;生产者消费者问题

    wait()和sleep()的区别 面试题:sleep() 和 wait()的异同? 相同点:一旦执行方法,都可以使得当前的线程进入阻塞状态. 不同点: 1)两个方法声明的位置不同:Thread类中声 ...

  3. 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析

    文章目录 概述 jstack或者可视化工具检测是否死锁(没有) 原因分析 概述 高并发编程-线程通信_使用wait和notify进行线程间的通信 - 遗留问题 我们看到了 应用卡住了 .... 怀疑是 ...

  4. java 取数组的前90位,LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面

    LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入 ...

  5. Java经典面试题:一个线程两次调用start()方法会出现什么情况?

    大家好,我是 Oracle首席工程师杨晓峰. 今天想和大家深入聊聊线程,相信大家对于线程这个概念都不陌生,它是Java并发的基础元素,理解.操纵.诊断线程是Java工程师的必修课,但是你真的掌握线程了 ...

  6. call线程起名字_多线程面试题总结

    1.什么是线程,什么是进程,它们有什么区别和联系,一个进程里面是否必须有个线程 进程本质是一个正在执行的程序,一个进程可以有多个线程.线程是进程的最小执行单位,一个进程至少有一个线程 区别:1:多进程 ...

  7. java多线程交替打印_使用Java实现三个线程交替打印0-74

    使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...

  8. python 面试题 aac caa相似_经典面试题:最长回文子串

    回文串是面试常常遇到的问题(虽然问题本身没啥意义),本文就告诉你回文串问题的核心思想是什么. 首先,明确一下什:回文串就是正着读和反着读都一样的字符串. 比如说字符串aba和abba都是回文串,因为它 ...

  9. java两个线程同时运行_Java实现的两个线程同时运行案例

    本文实例讲述了Java实现的两个线程同时运行.分享给大家供大家参考,具体如下: /** * 两个案例同时运行案例 * 1:这个两个线程并不是有规律的运行而是有没有规律的交替运行 */ package ...

最新文章

  1. 定制键盘输入处理(1503)
  2. 64位百度云 catia v6_逃狱兄弟百度云资源已更新,1080P高清资源分享64
  3. 忠于职守 —— sysmon 线程到底做了什么?(九)
  4. lombok和maven_Lombok,AutoValue和Immutables,或如何编写更少,更好的代码返回
  5. 电脑打开微信小程序_终于可以在电脑上玩转微信小程序啦
  6. 只要沾上婚恋焦虑,她们就王者变青铜
  7. 美股本周第二次熔断:道指大跌近10% 费城半导体指数大跌11%
  8. Python之面向对象2
  9. [转载] 民兵葛二蛋——第9集
  10. 线性代数常用知识点总结
  11. PQI Air Card:自带Wi-fi的闪存卡 即时分享精彩画面
  12. 日语输入法无法使用的解决方法
  13. 做外贸用哪个企业邮箱比较好?大容量外贸企业邮箱哪家好?
  14. 计算机d盘hlddz是啥,hlddzsdk.exe是什么进程?
  15. 使用DriverManager动态加载JDBC驱动时,报:java.sql.SQLException: No suitable driver found for xxxx 错误
  16. css实现精灵图片加载图片失败
  17. Praat:强大的语音处理工具。
  18. 计算机硬件选项,设备管理器为某些硬件提供了特殊选项,Win10如何设置,值得收藏...
  19. Android动画SVGA的使用
  20. 融资破局 |中英美三国多层次资本市场和STO融资的比较及借鉴

热门文章

  1. html中md5如何使用方法,html中使用js進行登錄md5加密提交並重定向新頁面
  2. ap 目标检测算法map_目标检测mAP怎么计算
  3. java304是什么错误_304 Not Modified 的意思 (Web的Cache问题)
  4. vscode 文件编码转换_荐几个让你开发效率“飞起”的VS Code 插件
  5. kext updater使用方法_语言清晰度测量方法的前世今生
  6. python的__name__
  7. 不能连接到 mysql_怎么无法连接到数据库?
  8. python面向对象编程指南 脚本之家_python对象及面向对象技术详解
  9. java hashset 实现原理_深入Java集合学习系列:HashSet的实现原理
  10. Spring Security login