当前位置: 首页 > 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过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

http://www.lryc.cn/news/356893.html

相关文章:

  • SQOOP详细讲解
  • 【Unity入门】认识Unity编辑器
  • Spring控制重复请求
  • AWS安全性身份和合规性之Key Management Service(KMS)
  • esp32 固件备份 固件恢复
  • linux开发之设备树四、设备树中断节点
  • 基于STM32实现智能楼宇对讲系统
  • 面试专区|【DevOps-46道DevOps高频题整理(附答案背诵版)】
  • 算法基础之台阶-Nim游戏
  • VUE3注册指令的方法
  • 【Python】 Python 字典查询:‘has_key()‘ 方法与 ‘in‘ 关键字的比较
  • IDEA通过tomcat运行注意事项
  • Unity Hub 添加模块报错 Validation Failed 的解决办法
  • 软件功能测试的类型和流程分享
  • 【C语言】atoi函数的使用及模拟实现
  • Golang:使用bndr/gotabulate实现美观的打印表格数据
  • 充电宝哪款好用?什么牌子充电宝耐用?充电宝选购要点总结
  • 【启程Golang之旅】基本变量与类型讲解
  • 使用docker部署项目
  • 智慧林业云巡平台 客户端和移动端(支持语音和视频)自动定位巡护,后端离线路线监测
  • 【最优化方法】实验三 无约束最优化方法的MATLAB实现
  • kafka-偏移量图解
  • 内网安全--隧道技术-MSF上线本地
  • 初识STM32单片机-TIM定时器
  • NSSCTF-Web题目3
  • 基于Java实现震中附近风景区预警可视化分析实践
  • 【CTF Web】CTFShow web7 Writeup(SQL注入+PHP+进制转换)
  • ABAP WRITE换行输出
  • VUE3学习第一篇:启动ruoyi
  • python-数据可视化(总)