首页
学习
活动
专区
圈层
工具
发布

经典面试题-两个线程交替打印奇数和偶数

前提 今天下班时候和同事聊天偶然听到面试题“两个线程交替打印奇数和偶数”的实现,这里做一个复盘。 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视器实现。...场景二:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用JDK提供的并发类库实现。...这两个场景中,场景一是一种比较古老的同步方式,本质由JVM实现;场景二是JDK1.5引入JUC包之后简化了并发编程的前提下的更简便的实现。下面针对两个场景做对应的实现。...场景一 场景一中,线程A和线程B交替打印奇数和偶数,使用对象监视器实现,通俗来说:线程A或线程B只要有一者竞争锁成功,就打印++i,通知其他线程从等待集合中释放,然后自身线程加入等待集合并且释放锁即可。...,然后thread-1打印偶数,这个和同步器框架的等待队列以及同步队列的竞争有关。

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    经典面试题-两个线程交替打印奇数和偶数

    前提 今天下班时候和同事聊天偶然听到面试题“两个线程交替打印奇数和偶数”的实现,这里做一个复盘。 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视器实现。...场景二:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用JDK提供的并发类库实现。...这两个场景中,场景一是一种比较古老的同步方式,本质由JVM实现;场景二是JDK1.5引入JUC包之后简化了并发编程的前提下的更简便的实现。下面针对两个场景做对应的实现。...场景一 场景一中,线程A和线程B交替打印奇数和偶数,使用对象监视器实现,通俗来说:线程A或线程B只要有一者竞争锁成功,就打印++i,通知其他线程从等待集合中释放,然后自身线程加入等待集合并且释放锁即可。...,然后thread-1打印偶数,这个和同步器框架的等待队列以及同步队列的竞争有关。

    4.4K41

    将Windows电脑相邻两个盘合并的方法

    这里首先需要注意:在基于Windows自带的合并磁盘分区功能加以盘符合并时,我们只能对相邻的2个分区加以操作,且只能将右侧的分区合并至左边,否则是不可以合并的(当然,倒是可以使用第三方分区合并软件来实现这些需求...其次需要注意:在合并分区前,需要将2个分区的数据都备份一下,防止出现数据丢失的问题;尤其是右侧那个分区,如果其中还有数据,且这些数据还需要的话,必须要对其做备份,否则数据会全部被删除。   ...如下图所示,我这里是将磁盘上此时所有可用的空间(也就是刚刚删除F盘后出现的剩余空间)都选中了;然后将“选择空间量”设置为“最大可用空间量”。   随后,选择“完成”即可;如下图所示。

    72810

    为什么会出现cpu使用率偶数核比奇数核高

    偶有云上用户反馈云主机cpu使用率偶数核比奇数核高的现象,比如cpu0高,cpu1低,cpu2高,cpu3低依次循环,这里的原因是开启超线程后一个物理core包含两个超线程,比如vcpu0/vcpu1是一个物理...如上图1所示这里以双socket和开启超线程的intel cpu为例,主机包含两个socket,每个socket为一个NUMA NODE,每个NUMA包含多个物理core,每个物理core包含两个超线程...以一个124个vcpu双NUMA且开启超线程的主机为例来介绍说明内核sched_domain和sched_group关系 主机两个Socket,每个Scoket有31个物理core共62个超线程vcpu...cpu使用率偶数核比奇数核高的现象了(当然这并不是说每种场景都是如此,只是说明在内核的选核逻辑上这种情况是存在的),如上图6所示当进程被创建出来时走的_do_fork->wake_up_new_task...cpu使用率偶数核比奇数核高的现象.

    85010

    【C语言指南】交换整数的奇数位和偶数位

    一、问题描述 使用C语言代码实现:将一个整数的奇数位和偶数位交换 二、解决思路 在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作。...当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左(或从最低位到最高位)数的位置。在这种计数方式下,第一位是奇数位,第二位是偶数位,依此类推。 1....然后,将奇数位和偶数位的位置边换 将上一步得到的整数的奇数位,左移奇数位变换到偶数位的位置上 将上一步得到的整数的偶数位,右移>>一位,即可将奇数位变换到偶数位的位置上 3....上一步分别左移右移之后,将奇数位和偶数位变换了位置,接下来将两个结果进行按位或 | 运算,即可将奇数位和偶数位合并在一起,完成转换 三、函数实现 #include int Exchange...不过要注意的一点是,因为宏是文本替换,所以运算时可以会因为优先级导致一些问题,保险起见,需要在可以会出现问题的表达式两边都加上括号

    44310

    相邻两个生产计划之间的衔接问题

    本文主要探讨在生产计划的“编制 -> 执行”过程中,遇到的计划与实际生产活动,相邻两个计划之间的衔接问题,及常见的方案建议。...部署了基于APS的自动计划系统后,编制计划所需的时间和计划的周全程度在一定程度上得到缩减和完善;但这种提效和优化,并无法完全消除计划与实际生产的差异,只能起来缓解作用。...该方法虽然可以实现计划工作的持续性,可实时更新计划;但这种连贯性也只是基于变更前后两个方案承接关系,来实现最大程度连贯性。...当变更内容过于巨大时,前后的变化还是足以让生产活动出现断层,从而引发上述提到的部分任务的前期预准备工作作废。...忆出现,但在当前计划时间内未予以考虑的任务可列为“未计划”,下一轮将要纳入规划运算的任务列为“草拟”,经过规划运算已排定任务执行时空、且需要发布给生产单位执行的任务列表“已发布”,已开始执行或已执行完成的任务列为

    69620

    相邻兄弟选择器用什么符号连接两个元素

    相邻兄弟选择器使用的符号CSS中,相邻兄弟元素选择器使用“+”加号来连接两个两个元素选择器。...语法如下:选择器1+选择器2{属性: 属性值;}相邻兄弟选择器选择的哪个兄弟元素据个人的编程经验,相邻的兄弟选择器匹配选择的一般是写在选择器1匹配到的元素1后面的那个元素2,而不是写在元素1前面的元素。...相邻兄弟选择器实例代码下方实例,设置了三个段落p元素,并通过中间的元素使用相邻兄弟选择器来匹配选择相邻的兄弟元素,并设置样式。...的样式被设置:段落1段落2段落3 #p1 + p{color:green;font-size:1.5em;}原文:相邻兄弟选择器用什么符号连接两个元素免责声明

    38220
    领券