当前位置: 首页 > news >正文

面试经典题:创建三个线程,按顺序依次循环打印hello+i

二面被问到的手撕题,自己总计一下。考察的还是比较基础的,但也是对自己知识领悟程度的考察。
写一个程序,要求创建三个线程依次打印hello+线程号。
考察多线程和同步的知识点应用
这里设置为打印10轮。

package 多线程;/*** @Author wuyifan* @Date 2024/6/4 20:11* @Version 1.0*/
class PrintSequence implements Runnable {private int threadId;private static final Object lock = new Object();private static int currentThreadId = 0;private int printCount = 10;public PrintSequence(int threadId) {this.threadId = threadId;}@Overridepublic void run() {for (int i = 0; i < printCount; ) {synchronized (lock) {if (currentThreadId % 3 == threadId) {System.out.println("Thread " + threadId + ": hello" + (i + 1));i++;currentThreadId++;lock.notifyAll(); // 唤醒所有等待的线程} else {try {lock.wait(); // 等待其他线程的唤醒} catch (InterruptedException e) {e.printStackTrace();}}}}}
}public class New3Thread {public static void main(String[] args) {Thread t1 = new Thread(new PrintSequence(0), "T1");Thread t2 = new Thread(new PrintSequence(1), "T2");Thread t3 = new Thread(new PrintSequence(2), "T3");t1.start();t2.start();t3.start();}
}

相关文章:

  • 你觉得学历在贬值吗?
  • 关于ASPICE 4.0评估师资质更新的说明-亚远景科技
  • Java多线程核心工具类
  • 运维开发之Linux机器码
  • 健康中国,福佑全球!第32届广州大健康展将于6月14-16日盛大举办
  • 21、matlab生成脉冲序列:pulstran()函数
  • thinkpad T440p ubuntu-slam软件安装记录
  • 【前端 - Vue】Vuex基础入门,创建仓库的详细步骤
  • 【Ambari】Docker 安装Ambari 大数据单机版本
  • vscode+latex设置跳转快捷键
  • PhpSpreadsheet表格导出
  • 一种基于高德Web API实现沿路画面的实现
  • 54.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(2)
  • 从 URL 中获取数据并创建列表解析
  • ch5链路层和局域网
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • javascript从右向左截取指定位数字符的3种方法
  • MySQL主从复制读写分离及奇怪的问题
  • SegmentFault 2015 Top Rank
  • spring学习第二天
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 巧用 TypeScript (一)
  • 如何设计一个比特币钱包服务
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 用 Swift 编写面向协议的视图
  • 回归生活:清理微信公众号
  • #1014 : Trie树
  • #pragma pack(1)
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (12)Hive调优——count distinct去重优化
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)WCF的Binding模型
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (三)docker:Dockerfile构建容器运行jar包
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • .NET Core跨平台微服务学习资源
  • .Net Web项目创建比较不错的参考文章
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net通用权限框架B/S (三)--MODEL层(2)
  • :中兴通讯为何成功
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ Linux ] Linux信号概述 信号的产生
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [Assignment] C++1
  • [C# 基础知识系列]专题十六:Linq介绍
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体
  • [C++] vector list 等容器的迭代器失效问题
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码
  • [ComfyUI进阶教程] animatediff视频提示词书写要点
  • [Django 0-1] Core.Checks 模块
  • [JS入门到进阶] 7条关于 async await 的使用口诀,新学 async await?背10遍,以后要考!快收藏
  • [linux] git lfs install 安装lfs