线程打印_经典面试题——两个线程交替打印奇数和偶数
前提
今天下班时候和同事聊天偶然听到面试题“两个线程交替打印奇数和偶数”的实现,这里做一个复盘。
复盘
- 场景一:线程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
线程打印_经典面试题——两个线程交替打印奇数和偶数相关推荐
- c语言两个线程交替打印奇数和偶数,经典面试题——两个线程交替打印奇数和偶数...
今天在和同事讨论线程说到了这个我就实现了一把 直接贴代码 public class Demo2 { private static volatile int i = 1; public static v ...
- 【Java】线程通信的例子:用两个线程打印 1-100;生产者消费者问题
wait()和sleep()的区别 面试题:sleep() 和 wait()的异同? 相同点:一旦执行方法,都可以使得当前的线程进入阻塞状态. 不同点: 1)两个方法声明的位置不同:Thread类中声 ...
- 高并发编程-线程通信_使用wait和notify进行线程间的通信2_多生产者多消费者导致程序假死原因分析
文章目录 概述 jstack或者可视化工具检测是否死锁(没有) 原因分析 概述 高并发编程-线程通信_使用wait和notify进行线程间的通信 - 遗留问题 我们看到了 应用卡住了 .... 怀疑是 ...
- java 取数组的前90位,LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面
LeetCode 面试题21. 调整数组顺序使奇数位于偶数前面 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 示例: 输入 ...
- Java经典面试题:一个线程两次调用start()方法会出现什么情况?
大家好,我是 Oracle首席工程师杨晓峰. 今天想和大家深入聊聊线程,相信大家对于线程这个概念都不陌生,它是Java并发的基础元素,理解.操纵.诊断线程是Java工程师的必修课,但是你真的掌握线程了 ...
- call线程起名字_多线程面试题总结
1.什么是线程,什么是进程,它们有什么区别和联系,一个进程里面是否必须有个线程 进程本质是一个正在执行的程序,一个进程可以有多个线程.线程是进程的最小执行单位,一个进程至少有一个线程 区别:1:多进程 ...
- java多线程交替打印_使用Java实现三个线程交替打印0-74
使用Java实现三个线程交替打印0-74 题目分析 三个线程交替打印,即3个线程是按顺序执行的.一个线程执行完之后,唤醒下一个线程,然后阻塞,等待被该线程的上一个线程唤醒.执行的顺序是一个环装的队列 ...
- python 面试题 aac caa相似_经典面试题:最长回文子串
回文串是面试常常遇到的问题(虽然问题本身没啥意义),本文就告诉你回文串问题的核心思想是什么. 首先,明确一下什:回文串就是正着读和反着读都一样的字符串. 比如说字符串aba和abba都是回文串,因为它 ...
- java两个线程同时运行_Java实现的两个线程同时运行案例
本文实例讲述了Java实现的两个线程同时运行.分享给大家供大家参考,具体如下: /** * 两个案例同时运行案例 * 1:这个两个线程并不是有规律的运行而是有没有规律的交替运行 */ package ...
最新文章
- 定制键盘输入处理(1503)
- 64位百度云 catia v6_逃狱兄弟百度云资源已更新,1080P高清资源分享64
- 忠于职守 —— sysmon 线程到底做了什么?(九)
- lombok和maven_Lombok,AutoValue和Immutables,或如何编写更少,更好的代码返回
- 电脑打开微信小程序_终于可以在电脑上玩转微信小程序啦
- 只要沾上婚恋焦虑,她们就王者变青铜
- 美股本周第二次熔断:道指大跌近10% 费城半导体指数大跌11%
- Python之面向对象2
- [转载] 民兵葛二蛋——第9集
- 线性代数常用知识点总结
- PQI Air Card:自带Wi-fi的闪存卡 即时分享精彩画面
- 日语输入法无法使用的解决方法
- 做外贸用哪个企业邮箱比较好?大容量外贸企业邮箱哪家好?
- 计算机d盘hlddz是啥,hlddzsdk.exe是什么进程?
- 使用DriverManager动态加载JDBC驱动时,报:java.sql.SQLException: No suitable driver found for xxxx 错误
- css实现精灵图片加载图片失败
- Praat:强大的语音处理工具。
- 计算机硬件选项,设备管理器为某些硬件提供了特殊选项,Win10如何设置,值得收藏...
- Android动画SVGA的使用
- 融资破局 |中英美三国多层次资本市场和STO融资的比较及借鉴
热门文章
- html中md5如何使用方法,html中使用js進行登錄md5加密提交並重定向新頁面
- ap 目标检测算法map_目标检测mAP怎么计算
- java304是什么错误_304 Not Modified 的意思 (Web的Cache问题)
- vscode 文件编码转换_荐几个让你开发效率“飞起”的VS Code 插件
- kext updater使用方法_语言清晰度测量方法的前世今生
- python的__name__
- 不能连接到 mysql_怎么无法连接到数据库?
- python面向对象编程指南 脚本之家_python对象及面向对象技术详解
- java hashset 实现原理_深入Java集合学习系列:HashSet的实现原理
- Spring Security login