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

“线程通信“一个案例

今天在处理项目需求的时候, 遇到这样一个问题:

项目中需要将用户界面上传的某种模型文件转换成另一种格式的文件, 以便进行预览操作. 而这个转换的过程需要调用到专业软件的脚本程序, 简单来说就是一个比较耗时的步骤. 并且这个转换还要分为两步进行, 需要调用两个脚本程序. 简单来说, 就是 A脚本调完, 把结果文件传生成到指定目录, B脚本需要去找这个结果文件继续进行下一步的转换操作, 这就要求 B 脚本需要等待时机去执行!! 

为了处理这个需求, 我的思路是:

启动两个线程, 一个是执行线程, 另一个是等待线程. 执行线程里去调A脚本,  等待线程里 听通知, 听到A脚本执行完成的通知后, 再去执B脚本.

具体简化后的代码如下, 欢迎指正错误!

/**
 * 
 * 线程通信案例
 * @author: cs
 * @date: 2025-03-27 22:01:33
 * @since: 1.0
 */
public class TreadDemo {

    private static boolean finished = false;
    private static final Object lock = new Object();
    
    public static void main(String[] args) {

        // 等待线程
        Thread waitThread = new Thread() {
            @Override
            public void run() {
                synchronized (lock) {
                    while (!finished) {
                        try {
                            System.out.println(">>>>>>>>> 等待中 ....");
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }

                    System.out.println(">>>>>>>>>>>>>> 主任务执行完了, 继续执行另一个任务 ");
                }
            }
        };
        waitThread.start();


        // 主任务线程
        Thread executeThread = new Thread() {
            @Override
            public void run() {
                synchronized (lock) {
                    try {
                        System.out.println(">>>>>>>>> 任务线程开始执行");
                        Thread.sleep(10000);
                        lock.notify();
                        finished = true;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        executeThread.start();
        
    }
    
}

相关文章:

  • 仓储物流中UWB标签实现货物实时追踪的技术路径与品铂科技方案解析
  • MySQL、创建数据库、表、SQL 函数:数学函数、字符串函数、日期函数、聚合函数
  • 怎么使用pm2启动和暂停后端程序(后端架构nodejs+koa)
  • 【学Rust写CAD】14线性插值函数(加入color.rs)
  • Docker 快速入门指南
  • 【安全运营】关于攻击面管理相关概念的梳理(二)
  • Ubuntu 24.04 安装 Docker 详细教程
  • SQL server中的事务与锁
  • 华为HG532路由器RCE漏洞 CVE-2017-17215 复现
  • 批量给 PDF 页面添加超链接
  • Flink实战教程从入门到精通(基础篇)(五)Flink部署-YARN运行模式
  • 风险研究 | AI 安全警钟响起:Manus AI 漏洞暴露的背后真相
  • LeetCode 第36、37题(数独问题)
  • spring ApplicationContext 继承的这些接口作用,示例,表格对比
  • 华为单臂路由 与 策略路由
  • SpringCould微服务架构之Docker(4)
  • chrome插件开发之API解析-chrome.scripting.executeScript()
  • 基于网启PXE服务器的批量定制系统平台(详细版)
  • 智启人文新篇:生成式人工智能(GAI)认证驱动文科教育数字化转型与跨界融合
  • 2025-03-27 学习记录--C/C++-C语言 头插法插入单链表
  • 怎么做网站黑链/太原百度seo排名软件
  • 做微商哪个网站有客源/优化大师 win10下载
  • 网站制作新技术/网购平台推广方案
  • 政府网站建设改版通知/网络推广岗位职责和任职要求
  • 网站建设易网宣/站长工具权重查询
  • 电子商务网站建设与维护 试卷/万网域名注册官网