“线程通信“一个案例

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

项目中需要将用户界面上传的某种模型文件转换成另一种格式的文件, 以便进行预览操作. 而这个转换的过程需要调用到专业软件的脚本程序, 简单来说就是一个比较耗时的步骤. 并且这个转换还要分为两步进行, 需要调用两个脚本程序. 简单来说, 就是 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();
        
    }
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值