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

三线程顺序打印1-100

三线程顺序打印1-100

题目

三个线程顺序打印1-100;

解题

基本思路

  1. 首先需要创建三个线程, 确定使用线程1打印 num % 3 = 1 的数, 线程2打印 num % 3 = 2 的数, 线程3打印 num % 3 = 0 的数;
  2. 使用 synchronized 同步锁让每次只有一个线程进行打印, 每个线程打印前先判断当前数是否由当前线程打印, 若不由则让当前线程休眠;
  3. 打印需要的数后, 再唤醒其他的线程继续打印;

实现代码

public class ThreeThreadsPrint1_100 {// 当前打印数private int num = 1;// 锁private final Object lock = new Object();// flag 标记应该打印数对3取余的余数// 线程1 打印 num%3 = 1 的数// 线程2 打印 num%3 = 2 的数// 线程3 打印 num%3 = 0 的数public void printNum(int flag) {while (num <= 100) {synchronized (lock) {// 此处需要判断 num<=100// 确保不会有线程因为 101 % 3 != flag 而休眠 导致程序无法退出while (num % 3 != flag && num <= 100) {try {// 当前数 不由当前线程打印 让当前线程休眠lock.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}if (num <= 100) {// 打印System.out.println("当前线程: " + Thread.currentThread().getName() + "打印: " + num++);// 唤醒其他线程lock.notifyAll();}}}}public static void main(String[] args) throws InterruptedException {// 实例化对象ThreeThreadsPrint1_100 obj = new ThreeThreadsPrint1_100();Thread t1 = new Thread(() -> obj.printNum(1), "t1");Thread t2 = new Thread(() -> obj.printNum(2), "t2");Thread t3 = new Thread(() -> obj.printNum(0), "t3");// 不按顺序启动 验证是否成功实现t2.start();t1.start();t3.start();// 让主线程等到三个线程执行结束后再执行t1.join();t2.join();t3.join();}}

相关文章:

三线程顺序打印1-100

三线程顺序打印1-100 题目 三个线程顺序打印1-100; 解题 基本思路 首先需要创建三个线程, 确定使用线程1打印 num % 3 1 的数, 线程2打印 num % 3 2 的数, 线程3打印 num % 3 0 的数;使用 synchronized 同步锁让每次只有一个线程进行打印, 每个线程打印前先判断当前数是…...

中央处理器CPU

中央处理器CPU cpu的组成&#xff08;从功能方面来看&#xff09;cpu的执行过程★.取指令阶段★.解码阶段★.执行阶段 重点&#xff1a; 1.cpu的组成 2.cpu怎么执行程序&#xff08;命令&#xff09; cpu的组成&#xff08;从功能方面来看&#xff09; 寄存器&#xff1a;用来临…...

用Python实现AI人脸识别

实现AI人脸识别通常涉及到使用深度学习库&#xff0c;如TensorFlow或PyTorch&#xff0c;配合预训练的人脸识别模型。以下是一个使用Python和TensorFlow框架中的tensorflow_hub模块来加载和使用一个预训练的人脸识别模型的简单示例。 步骤 1: 安装必要的库 首先&#xff0c;你…...

MSPM0G3507_2024电赛自动行驶小车(H题)_问题与感悟

这次电赛题目选的简单了&#xff0c;还规定不能使用到摄像头&#xff0c;这让我之前学习的Opencv 4与树莓派无用武之地了&#xff0c;但我当时对于三子棋题目饶有兴趣&#xff0c;但架不住队友想稳奖&#xff0c;只能选择这个H题了...... 之后我还想抽空将这个E题三子棋题目做…...

C语言:指针(2)

一.数组名 在了解数组名前我们先看一段代码 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 根据我们上一篇学习的知识&#xff0c;我们知道&arr[0]是数组第一个元素的地址&#xff0c;这时我们再看另一段代码的运行结果。 #include <stdio.h> int ma…...

数组——二维数组

数组(中) 二维数组 定义 二维数组本质上是一个行列式的组合&#xff0c;也就是说二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。 二维数组可被视为一个特殊的一维数组&#xff0c;相当于二维数组又是一个一维数组&#xff0c;只不过它的元素是一维数组。 …...

深入 Vue 组件与状态管理的教程

目录 深入 Vue 组件与状态管理的教程第一部分&#xff1a;深入组件1. 理解插槽&#xff08;Slots&#xff09;的使用1.1 基础插槽示例1.2 具名插槽1.3 作用域插槽 第二部分&#xff1a;Vue Router1. 学习 Vue Router 的基本配置1.1 基本路由配置1.2 嵌套路由1.3 路由参数 2. 导…...

Spring Boot 实现异步处理多个并行任务

在现代Web应用开发中&#xff0c;异步处理和多任务并行处理对于提高系统的响应性和吞吐量至关重要。Spring Boot 提供了多种机制来实现异步任务处理&#xff0c;本文将介绍如何利用这些机制来优化您的应用程序性能。 1. 引言 在高负载情况下&#xff0c;如果所有的请求都采用…...

TiDB系列之:使用Flink TiDB CDC Connector采集数据

TiDB系列之&#xff1a;使用Flink TiDB CDC Connector采集数据 一、依赖项二、Maven依赖三、SQL Client JAR四、如何创建 TiDB CDC 表五、连接器选项六、可用元数据七、特征一次性处理启动阅读位置多线程读取DataStream Source 八、数据类型映射 TiDB CDC 连接器允许从 TiDB 数…...

每日一道算法题 最接近的三数之和

题目 16. 最接近的三数之和 - 力扣&#xff08;LeetCode&#xff09; Python class Solution:def threeSumClosest(self, nums: List[int], target: int) -> int:nums.sort()nlen(nums)ans0min_diffinf # infinite 无穷for i in range(n-2):tmpnums[i]li1rn-1while l<…...

搭建自己的金融数据源和量化分析平台(六):下载并存储沪深两市上市公司财报

基于不依赖wind、某花顺等第三方平台数据的考虑&#xff0c;尝试直接从财报中解析三大报表进而计算ROE等财务指标&#xff0c;因此需要下载沪深两市的上市公司财报数据&#xff0c;便于后续从pdf中解析三大报表。 深市爬虫好做&#xff0c;先放深市爬虫&#xff1a; 根据时间段…...

C语言-常见关键字详解

一、const 关键字const用于声明常量&#xff0c;赋值后&#xff0c;其值不能再被修改。 示例&#xff1a; const int MAX_COUNT 100; 二、static static关键字在不同情境下有不同作用&#xff1a; 1.函数中的静态变量&#xff1a;保留变量状态&#xff0c;仅初始化一次&a…...

异步编程之std::future(一): 使用

目录 1.概述 2.std::future的基本用法 3.使用 std::shared_future 4.std::future的使用场景 5.总结 1.概述 在编程实践中&#xff0c;我们常常需要使用异步调用。通过异步调用&#xff0c;我们可以将一些耗时、阻塞的任务交给其他线程来执行&#xff0c;从而保证当前线程的…...

Vue3 + JS项目配置ESLint Pretter

前言 如果在开发大型项目 同时为多人协作开发 那么 ESLint 在项目中极为重要 在使用 ESLint 的同时 也需要使用 Pretter插件 统一对代码进行格式化 二者相辅相成 缺一不可 1. 安装 VsCode 插件 在 VsCode 插件市场搜索安装 ESLint 和 Pretter 2. 安装依赖 这里直接在 pac…...

JavaScript (十四)——JavaScript typeof和类型转换

目录 JavaScript typeof, null, 和 undefined typeof 操作符 null undefined undefined 和 null 的区别 JavaScript 类型转换 JavaScript 数据类型 JavaScript 类型转换 将数字转换为字符串 将布尔值转换为字符串 将日期转换为字符串 将字符串转换为数字 一元运算符…...

CTF-web 基础

网络协议 OSI七层参考模型&#xff1a;一个标准的参考模型 物理层 网线&#xff0c;网线接口等。 数据链路层 可以处理物理层传入的信息。 网络层 比如IP地址 传输层 控制传输的内容的传输&#xff0c;在传输的过程中将要传输的信息分块传输完成之后再进行合并。 应用…...

CP AUTOSAR标准之ChineseV2XNetwork(AUTOSAR_SWS_ChineseV2XNetwork)(更新中……)

1 简介和功能概述 本文档指定了AUTOSAR基础软件模块中国车辆对接网络(CnV2xNet)的功能、API和配置。   中国车联网网络(CnV2xNet)与中国车联网消息(CnV2xMsg)、中国车联网管理(CnV2xMgt)、中国车联网安全(CnV2xSec)以及AUTOSAR BSW模块以太网接口(EthIf)共同构成了AUTOSAR架构…...

【hloc】 项目流程

hloc 项目流程 1. 数据集准备2. 特征提取3. 匹配特征4. 三维重建5. 定位6. 结果评估7. 示例脚本 这个项目涉及到了视觉定位和三维重建的一系列步骤&#xff0c;从特征提取、匹配、三维重建到定位和结果评估。通过提供的脚本文件&#xff0c;用户可以方便地运行整个流程。 1. 数…...

鸿蒙系统开发【应用接续】基本功能

应用接续 介绍 基于ArkTS扩展的声明式开发范式编程语言编写的一个分布式视频播放器&#xff0c;主要包括一个直播视频播放界面&#xff0c;实现视频播放时可以从一台设备迁移到另一台设备继续运行&#xff0c;来选择更合适的设备继续执行播放功能以及PAD视频播放时协同调用手…...

nextTick方法的作用是什么?什么时候会用到

nextTick 方法在 Vue.js 中扮演着重要的角色&#xff0c;它用于在下次 DOM 更新循环结束之后执行延迟回调。这主要用于确保在 Vue 完成 DOM 更新后执行依赖于 DOM 的操作。 作用 确保 DOM 更新完成&#xff1a;Vue 的 DOM 更新是异步的&#xff0c;当你修改了数据后&#xff0…...

ST LPS25/LPS22气压传感器:从原理到Arduino/Python实战应用

1. 项目概述气压传感器&#xff0c;这个听起来有点专业的名词&#xff0c;其实离我们的生活并不遥远。从你手机里的天气App显示的“气压”数值&#xff0c;到无人机能够稳定悬停在一定高度&#xff0c;再到一些高端智能手表上的海拔计功能&#xff0c;背后都离不开它的身影。简…...

Taotoken 的用量看板如何帮助开发者优化模型调用策略

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken 的用量看板如何帮助开发者优化模型调用策略 1. 引言&#xff1a;从“盲用”到“明察” 在集成大模型 API 进行开发时&am…...

基于多AI智能体协同的内容工厂:从架构原理到部署实践

1. 项目概述&#xff1a;一个由五个AI智能体协同工作的内容工厂如果你在内容创作领域摸爬滚打过&#xff0c;肯定遇到过这样的困境&#xff1a;想一个爆款选题、写一篇抓人的文案、设计一张吸睛的封面、再制定一套推广策略&#xff0c;整个过程下来&#xff0c;精力被撕扯得七零…...

csp信奥赛C++高频考点专项训练之字符串 --【回文字符串】:回文拼接

csp信奥赛C高频考点专项训练之字符串 --【回文字符串】&#xff1a;回文拼接 题目描述 一个字符串是回文串&#xff0c;当且仅当该字符串从前往后读和从后往前读是一样的&#xff0c;例如&#xff0c;aabaa\texttt{aabaa}aabaa 和 ccddcc\texttt{ccddcc}ccddcc 都是回文串&…...

电解电容储存寿命解析:失效机理、评估方法与激活技术

1. 项目概述&#xff1a;一个被忽视的“保质期”问题“电解电容放多久会坏&#xff1f;”这个问题&#xff0c;乍一听像是电子爱好者仓库角落里的一次闲聊&#xff0c;或者维修师傅面对一堆旧板卡时的嘀咕。但在我十多年的硬件设计、生产管理和失效分析经历里&#xff0c;这个问…...

中介房源管理系统使用体验评测

在房产中介行业数字化转型的大趋势下&#xff0c;传统人工登记、纸质管理房源客源的模式早已无法适配行业高效发展需求。中介房源管理系统成为各大中小中介门店、连锁经纪团队规范业务流程、降低运营成本、提升成交效率的核心工具。市面上各类中介房源管理软件品类繁多&#xf…...

如何快速掌握WPR机器人仿真:ROS仿真开发的完整解决方案

如何快速掌握WPR机器人仿真&#xff1a;ROS仿真开发的完整解决方案 【免费下载链接】wpr_simulation 项目地址: https://gitcode.com/gh_mirrors/wp/wpr_simulation 想要在ROS环境中进行机器人仿真开发却苦于缺乏合适的工具&#xff1f;WPR仿真工具为你提供了一个功能完…...

VirtualMonitor虚拟显示器:三步打造你的专业级多屏工作空间

VirtualMonitor虚拟显示器&#xff1a;三步打造你的专业级多屏工作空间 【免费下载链接】VirtualMonitor 项目地址: https://gitcode.com/gh_mirrors/vi/VirtualMonitor 在当今数字化工作环境中&#xff0c;单一显示器的局限性日益凸显&#xff0c;而硬件扩展的成本和空…...

紧急预警:Midjourney即将关闭8x10非标准宽高比直出通道!倒计时48小时抢救指南——离线缓存技巧、本地tiled render补救法与PDF/X-4预检模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney 8x10大画幅直出通道关停事件全景速览 2024年7月&#xff0c;Midjourney官方悄然关闭了长期服务于专业摄影与印刷场景的 /imagine --tile 8x10直出通道&#xff0c;该通道曾支持用户一次性生…...

Genshin_StarRail_fps_unlocker:终极帧率解锁指南,轻松突破60帧限制

Genshin_StarRail_fps_unlocker&#xff1a;终极帧率解锁指南&#xff0c;轻松突破60帧限制 【免费下载链接】Genshin_StarRail_fps_unlocker Genshin Impact & HKSR Fps Unlock 原神崩铁帧率解锁 项目地址: https://gitcode.com/gh_mirrors/ge/Genshin_StarRail_fps_unl…...