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

JAVA学习-练习试用Java实现“多线程问题”

问题:

1.程序中需要开启两个线程(线程1和线程2)

2.线程1固定5秒钟执行一次

3.线程2固定10秒钟执行一次

4.开启程序如何做到线程1执行完成后再执行线程2并且在之后无论谁先执行都需等待对方执行完成后才可以开始执行

解答思路:

要实现线程 1 执行完成后再执行线程 2,并且在之后无论谁先执行都需等待对方执行完成后才可以开始执行,可以使用线程同步机制,如'CountDownLatch'。'CountDownLatch'是一个同步辅助类,它允许一个或多个线程等待其他线程完成操作。下面是一个使用'CountDownLatch'实现多线程问题的代码示例:

import java.util.concurrent.CountDownLatch;public class MultiThreadExample {// 创建两个 CountDownLatch 对象private static CountDownLatch thread1Latch = new CountDownLatch(1);private static CountDownLatch thread2Latch = new CountDownLatch(1);public static void main(String[] args) {// 创建并启动线程 1new Thread(new Thread1()).start();// 创建并启动线程 2new Thread(new Thread2()).start();}// 线程 1 的执行逻辑static class Thread1 implements Runnable {@Overridepublic void run() {// 执行线程 1 的具体逻辑,模拟耗时操作try {// 输出开始执行的消息System.out.println("线程 1: 等待其他线程");// 使当前线程等待,直到 thread2Latch 的计数器为 0thread1Latch.await();// 输出执行结束的消息System.out.println("线程 1: 执行完毕");} catch (InterruptedException e) {e.printStackTrace();}}}// 线程 2 的执行逻辑static class Thread2 implements Runnable {@Overridepublic void run() {// 执行线程 2 的具体逻辑,模拟耗时操作try {// 输出开始执行的消息System.out.println("线程 2: 等待其他线程");// 使当前线程等待,直到 thread1Latch 的计数器为 0thread2Latch.await();// 输出执行结束的消息System.out.println("线程 2: 执行完毕");} catch (InterruptedException e) {e.printStackTrace();}}}}

上述程序中,首先使用'CountDownLatch'创建了两个'CountDownLatch'对象'thread1Latch'和'thread2Latch',然后分别创建并启动线程 1 和线程 2。在线程 1 和线程 2 的执行逻辑中,通过调用'thread1Latch.await()'和'thread2Latch.await()'使当前线程等待,直到'thread1Latch'和'thread2Latch'的计数器为 0,从而实现线程 1 和线程 2 的同步执行。

(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

相关文章:

JAVA学习-练习试用Java实现“多线程问题”

问题: 1.程序中需要开启两个线程(线程1和线程2) 2.线程1固定5秒钟执行一次 3.线程2固定10秒钟执行一次 4.开启程序如何做到线程1执行完成后再执行线程2并且在之后无论谁先执行都需等待对方执行完成后才可以开始执行 解答思路: 要实现线程 1 执行完成…...

SQOOP详细讲解

SQOOP安装及使用 SQOOP安装及使用SQOOP安装1、上传并解压2、修改文件夹名字3、修改配置文件4、修改环境变量5、添加MySQL连接驱动6、测试准备MySQL数据登录MySQL数据库创建student数据库切换数据库并导入数据另外一种导入数据的方式使用Navicat运行SQL文件导出MySQL数据库impo…...

【Unity入门】认识Unity编辑器

Unity 是一个广泛应用于游戏开发的强大引擎,从 1.0 版本开始到现在,其编辑器的基本框架一直保持稳定。其基于组件架构的设计,使得界面使用起来直观且高效。为了更好地理解 Unity 的界面,我们可以将其比喻为搭建一个舞台。以下是对…...

Spring控制重复请求

通过AOP拦截所有请求&#xff0c;控制在规定时间内请求次数。 1&#xff1a;添加maven <dependency><groupId>net.jodah</groupId><artifactId>expiringmap</artifactId><version>0.5.10</version> </dependency> 2&#x…...

AWS安全性身份和合规性之Key Management Service(KMS)

AWS Key Management Service&#xff08;KMS&#xff09;是一项用于创建和管理加密密钥的托管服务&#xff0c;可帮助客户保护其数据的安全性和机密性。 比如一家医疗保健公司需要在AWS上存储敏感的病人健康数据&#xff0c;需要对数据进行加密以确保数据的机密性。他们使用AW…...

esp32 固件备份 固件恢复

首先是固件备份&#xff0c;这个在产品的工程管理中还是相当重要的。由于工具链的更新&#xff08;工具版本&#xff09;&#xff0c;以及板子或其上物料的变更&#xff08;硬件版本&#xff09;&#xff0c;或者新的库的导入或原有库的删除&#xff0c;PCBA是分分钟有可能死给…...

linux开发之设备树四、设备树中断节点

中断节点 这里是由原厂的BSP工程师写的一部分 在CPU的外部有一个GIC控制器&#xff0c;外设会连接在GIC控制器上 设备树是对硬件进行描述的&#xff0c;所以设备树会对CPU进行描述&#xff0c;也要对GIC 控制器进行描述&#xff0c;这部分的代码由原厂的BSP工程师进行编写&…...

基于STM32实现智能楼宇对讲系统

目录 引言环境准备智能楼宇对讲系统基础代码示例&#xff1a;实现智能楼宇对讲系统 音频输入和输出按键控制显示屏和用户界面网络通信应用场景&#xff1a;楼宇安防与智能家居问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在STM32嵌入式系统中使用C语言实现智能…...

面试专区|【DevOps-46道DevOps高频题整理(附答案背诵版)】

简述什么是 DevOps工作流程 &#xff1f; DevOps工作流程是一种将开发和运维团队紧密结合起来的方法&#xff0c;旨在实现软件开发和交付的高效性和可靠性。它强调自动化和持续集成&#xff0c;以便频繁地进行软件交付和部署。 DevOps工作流程通常包括以下阶段&#xff1a; …...

算法基础之台阶-Nim游戏

台阶-Nim游戏 核心思想&#xff1a;博弈论 可以看作第i阶台阶上有i个含有i个石子的堆这样所有台阶上一共n!个堆就变成了经典Nim优化&#xff1a;发现偶数阶台阶上2n堆异或 0 , 奇数阶台阶异或 原本石子数量 因此 当遍历到奇数阶时异或一下就行 #include <iostream>…...

VUE3注册指令的方法

指令注册只能全局指令和选项式页面指令,composition api没有页面指令 选项式页面指令 <template><div class"home"><h3>自定义指令</h3><div class"from"><el-input type"text" v-focus v-model"name&q…...

【Python】 Python 字典查询:‘has_key()‘ 方法与 ‘in‘ 关键字的比较

基本原理 在 Python 中&#xff0c;字典&#xff08;dict&#xff09;是一种非常常用的数据结构&#xff0c;用于存储键值对。字典的查询操作是编程中常见的任务之一。在 Python 2.x 版本中&#xff0c;has_key() 方法被用来检查字典中是否存在某个键。然而&#xff0c;在 Pyt…...

IDEA通过tomcat运行注意事项

配置run--》edit configurations 以下的A B部分要保持一致 A和B的路径要保持一致...

Unity Hub 添加模块报错 Validation Failed 的解决办法

提供两种方法&#xff0c;请自行选择其中一种。 在C:\Windows\System32\drivers\etc\hosts中添加下面的内容并保存后&#xff0c;完全关闭Unity Hub并重新打开&#xff0c;再次尝试下载刚刚失败的模块。 127.0.0.1 public-cdn.cloud.unity3d.com 127.0.0.1 public-cdn.cloud.…...

软件功能测试的类型和流程分享

在现代社会&#xff0c;软件已经成为人们生活中不可或缺的一部分&#xff0c;而在软件的开发过程中&#xff0c;功能测试是不可或缺的环节。软件功能测试指的是对软件系统的功能进行检查和验证&#xff0c;以确保软件在各种情况下能够正常运行&#xff0c;并且能够按照用户需求…...

【C语言】atoi函数的使用及模拟实现

atoi (ascii to integer)&#xff0c;是把参数 str 所指向的字符串转换为一个整数&#xff08;int类型&#xff09;的库函数。 使用场景 引子&#xff1a; 有兴趣的朋友可以听我逐句翻译一下cpluscplus.com里的这段解释&#xff08;要考六级了练一下&#xff09;&#xff1a; …...

Golang:使用bndr/gotabulate实现美观的打印表格数据

bndr/gotabulate 可以使用 Go 语言简单、美观的打印表格数据 文档 https://pkg.go.dev/github.com/bndr/gotabulatehttps://github.com/bndr/gotabulate 安装 go get github.com/bndr/gotabulate代码示例 package mainimport ("fmt""github.com/bndr/gotab…...

充电宝哪款好用?什么牌子充电宝耐用?充电宝选购要点总结

随着科技的飞速发展&#xff0c;充电宝已成为现代生活的必备之物。无论是日常通勤、旅行出差&#xff0c;还是在紧急情况下&#xff0c;充电宝都能为我们的电子设备提供可靠的电力支持。然而&#xff0c;面对市场上众多品牌和型号的充电宝&#xff0c;如何选择一款性价比高的充…...

【启程Golang之旅】基本变量与类型讲解

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…...

使用docker部署项目

一、docker私有镜像仓库 1、docker私有镜像仓库 库&#xff08;Repository&#xff09;是集中存放镜像的地方&#xff0c;又分为公共镜像和私有仓库。 当我们执行docker pull xxx的时候&#xff0c;它实际上是从registry.docker.com这个地址去查找&#xff0c;这就是Docker公…...

逆向分析实战:从IDA反编译看bjdctf_2020_babystack的栈溢出漏洞成因与利用

逆向工程实战&#xff1a;bjdctf_2020_babystack栈溢出漏洞的深度解析 在二进制安全领域&#xff0c;栈溢出漏洞始终是攻防对抗的经典课题。今天我们将以bjdctf_2020_babystack这道CTF题目为案例&#xff0c;通过IDA Pro的静态分析视角&#xff0c;完整还原从漏洞发现到利用的…...

Keil4 STC15浮点运算踩坑实录:如何避免数据类型转换导致的诡异错误

Keil4 STC15浮点运算避坑指南&#xff1a;从原理到实战的数据类型陷阱解析 在嵌入式开发领域&#xff0c;STC15系列单片机凭借其优异的性价比和丰富的功能接口&#xff0c;成为许多中小型项目的首选。然而当开发者使用Keil4这一经典但略显陈旧的开发环境时&#xff0c;常常会遇…...

论文降AI完成后怎么跟导师解释文字变化:沟通话术和注意事项

论文降AI完成后怎么跟导师解释文字变化&#xff1a;沟通话术和注意事项 这是一篇我自己也会反复翻看的教程。因为每次帮朋友降AI的时候&#xff0c;总有些细节差点忘记。 用的工具是嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元一篇&#xff0c;达标…...

用OB_Template实现笔记高效管理与知识沉淀:从入门到精通

用OB_Template实现笔记高效管理与知识沉淀&#xff1a;从入门到精通 【免费下载链接】OB_Template OB_Templates is a Obsidian reference for note templates focused on new users of the application using only core plugins. 项目地址: https://gitcode.com/gh_mirrors/…...

3分钟上手!FrankMocap让普通摄像头变身专业动捕设备

3分钟上手&#xff01;FrankMocap让普通摄像头变身专业动捕设备 【免费下载链接】frankmocap A Strong and Easy-to-use Single View 3D HandBody Pose Estimator 项目地址: https://gitcode.com/gh_mirrors/fr/frankmocap 在数字内容创作与交互设计领域&#xff0c;3D动…...

仅需6GB显存!GPT-SoVITS部署指南:低成本实现高质量语音合成

仅需6GB显存&#xff01;GPT-SoVITS部署指南&#xff1a;低成本实现高质量语音合成 1. 项目介绍与核心优势 GPT-SoVITS 是一个革命性的开源语音合成工具&#xff0c;它巧妙结合了GPT的语言生成能力和SoVITS的语音转换技术。这个项目最大的亮点在于&#xff0c;它能够用极少的…...

UEFI启动全流程拆解:从按下电源键到系统加载的幕后故事

UEFI启动全流程拆解&#xff1a;从按下电源键到系统加载的幕后故事 当你按下电脑的电源键&#xff0c;短短几秒内&#xff0c;一场精密的交响乐正在硬件深处悄然上演。这场演出的总指挥&#xff0c;正是现代计算机的启动管家——UEFI&#xff08;统一可扩展固件接口&#xff0…...

OpenClaw安全防护指南:GLM-4.7-Flash执行权限管控实践

OpenClaw安全防护指南&#xff1a;GLM-4.7-Flash执行权限管控实践 1. 为什么需要安全防护&#xff1f; 上周我在调试OpenClaw自动化脚本时&#xff0c;差点酿成大祸。当时想让GLM-4.7-Flash模型帮我整理下载目录里的PDF文件&#xff0c;结果模型误解了指令&#xff0c;竟然试…...

丹青识画系统快速上手:3步完成镜像部署与首次调用

丹青识画系统快速上手&#xff1a;3步完成镜像部署与首次调用 想试试那个能看懂图片里有什么、还能跟你聊天的AI吗&#xff1f;丹青识画系统就是这么一个有趣的工具。你可能在网上看过一些演示&#xff0c;一张图丢进去&#xff0c;AI就能告诉你图里有啥&#xff0c;甚至能回答…...

无代码玩转OpenClaw:nanobot镜像图形化配置自动化流程

无代码玩转OpenClaw&#xff1a;nanobot镜像图形化配置自动化流程 1. 为什么选择图形化配置OpenClaw 作为一个长期与技术打交道的开发者&#xff0c;我最初接触OpenClaw时也被它的命令行配置方式劝退过。直到发现了nanobot这个超轻量级镜像&#xff0c;才真正体会到"无代…...