热文:蔚来手撕代码题:三个线程循环打印ABC
问题如下:
(资料图片)
思路分析https://www.nowcoder.com/discuss/493178141461041152
三个线程交替打印 ABC 的实现方法有很多,我个人比较倾向于使用 JUC 下的 CyclicBarrier(循环栅栏,也叫循环屏障)来实现,因为循环栅栏天生就是用来实现一轮一轮多线程任务的,它的核心实现思路如下图所示:
CyclicBarrier 作用是让一组线程相互等待,当达到一个共同点时,所有之前等待的线程再继续执行,且 CyclicBarrier 功能可重复使用。
上图描述的就是 CyclicBarrier 每轮等待 5 个线程全部达到一个共同点时,再执行下一阶段的任务。
举个例子比如磊哥要坐班车回老家,因为中途不允许上、下乘客,那么营运的公司为了收益最大化,就会等人满之后再发车,这个发车的触发条件就是 CyclicBarrier 中多个线程执行的共同点。等汽车达到另一个站点之后也是同样的操作,等待乘客再次坐满之后,再继续发车,CyclicBarrier 就是这样执行的,它也是可以循环使用的。
实现代码import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;/** * 3 个线程交替打印 ABC */public class ThreadLoopPrint { // 共享计数器 private static int sharedCounter = 0; public static void main(String[] args) { // 打印的内容 String printString = "ABC"; // 定义循环栅栏 CyclicBarrier cyclicBarrier = new CyclicBarrier(3, () -> { }); // 执行任务 Runnable runnable = new Runnable() { @Override public void run() { for (int i = 0; i < printString.length(); i++) { synchronized (this) { sharedCounter = sharedCounter > 2 ? 0 : sharedCounter; // 循环打印 System.out.println(printString.toCharArray()[sharedCounter++]); } try { // 等待 3 个线程都打印一遍之后,继续走下一轮的打印 cyclicBarrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } } } }; // 开启多个线程 new Thread(runnable).start(); new Thread(runnable).start(); new Thread(runnable).start(); }}
以上程序执行的结果如下图所示:
小结多线程循环打印主要是考察应聘者对于多线程模块掌握的情况,通过应聘者编写的代码和编写代码所用的时间,可以非常直观的了解应聘者的代码基本功。
作者介绍王磊(人称磊哥),13 年一线编程工作经验,3 年授课经验,曾就职于 360,资深技术博主。曾担任某思教育和某谷电商的研发经理和技术负责人。
Java 技术传播者,博客总阅读量近 300 万次,博客成就:腾讯云年年度最佳作者/掘金社区优秀作者/拉勾专栏作者/GitChat(CSDN 旗下)畅销作家/慕课讲师/阿里云社区技术专家等,发布了 6 个技术专栏,分别是拉勾平台的《Java大厂真题与源码34讲》,GitChat 平台的《Java 面试全解析:核心知识点与典型面试题》《程序员的 MySQL 面试金典》《Redis 核心原理与实战》《程序员的 Redis 面试金典》,慕课网的《设计模式深度解析34讲》等。
关键词:
您可能也感兴趣:
为您推荐
你关心的都在这!2023年高考志愿填报十问十答来了|每日热闻
谁的青春动了!比赛中梅西与“小毛驴”奥特加相互问候|每日热讯
椿萱茂·颐天护理院暖心公益为民服务,双虹社区致谢送锦旗 当前视点
排行
最近更新
- 热文:蔚来手撕代码题:三个线程循环打印ABC
- 焦点日报:大逆转!街拍不是随意的,而是小姐姐设下的游戏,...
- 环球信息:她长得漂亮,演技好,凭《甄嬛传》出圈,出道29年不...
- 海淀区终身寿险哪里买?海淀区人如何买增额终身寿险?增额终...
- 2023年吉林一级消防工程师报名网站入口及报考流程-环球观天下
- 今日快看!镇平枣园镇:做好燃气安全 提高防护意识
- 宜春学院2023年研究生一志愿复试时间安排
- 当前报道:怀孕几个月开始补钙最佳_怀孕几个月开始补钙
- 【焦点热闻】全球最大、海拔最高“水光互补”电站在四川投产
- 黄河流域九省(区)文化馆联盟成立|全球通讯
- 形容车多的成语四个字_形容车多的成语
- 红檀木寓意_红檀木
- 世茂集团:预期内部监控检讨将于2023年7月完成-环球热议
- 油电同价的双刃剑下,燃油车和新能源车都面临着生死关
- 法拉第交付推迟,贾跃亭致歉 天天动态
- 推进“网上办”“即时办” 雄安新区营造一流营商环境|天天滚动
- 暗夜精灵版“宝马X3 M”首次曝光,原厂怒怼503匹马力!_天天即时
- 世界要闻:6月25日棉花絮之瓦格纳兵谏简报
- 办理摩托车车牌需要驾驶证吗
- 8月8日登陆PS4/PS5:采用免费+道具收费模式
- 焦点要闻:湘潭市少儿图书馆:与少年儿童话端午制香囊
- 地铁不设女性车厢,但也不能对“咸猪手”视而不见
- 当前快看:“龙舟经济”带旺端午消费
- 四川双流经开区49个项目集中开工,总投资216.83亿元
- 端午假期北京市公园游客326万人次 增六成|环球看点
- 赖“稳”三关键 媒体人曝英系要角1句话震撼
- 孝义市开展诚信旅游主题宣传活动_环球通讯
- 汾阳:持续开展燃气安全隐患专项排查整治 筑牢燃气安全“防...
- “候鸟服务站”,让“候鸟”党员有家有为 天天头条
- 天天快消息!华泰证券:人形机器人迭代下供应链的新机遇