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