AIWROK软件多线程协作示例代码解析
AIWROK软件多线程协作示例代码解析// 创建线程对象
var dataThread = new thread();
var logThread = new thread();
/**************** 数据生成线程 ****************/
dataThread.runJsCode(function() {
for(var i=1; i<=5; i++) {
printl("生成数据:", i);
java.lang.Thread.sleep(1000); // Rhino引擎专用休眠方法
}
}, "数据线程");
/**************** 日志记录线程 ****************/
logThread.runJsCode(function() {
for(var j=1; j<=5; j++) {
printl("记录日志:", new Date());
java.lang.Thread.sleep(1500);
}
}, "日志线程");
/**************** 主线程监控 ****************/
var checkInterval = setInterval(function() {
// 状态组合检测
var status = "数据线程状态:" + (dataThread.isAlive() ? "运行中" : "已停止") +
" | 日志线程状态:" + (logThread.isAlive() ? "运行中" : "已停止");
printl(status);
// 双线程完成检测
if(!dataThread.isAlive() && !logThread.isAlive()) {
clearInterval(checkInterval);
printl("所有线程执行完成");
}
}, 500); // 每0.5秒检测一次
/**************** 安全停止机制 ****************/
setTimeout(function() {
dataThread.stop();// 强制终止数据线程
logThread.stop(); // 强制终止日志线程
printl("强制停止所有线程");
}, 10000); // 10秒后执行
详细说明
[*]线程对象创建
[*]使用new thread()创建两个独立线程对象
[*]dataThread用于数据处理,logThread用于日志记录
[*]每个线程有独立的执行上下文和生命周期
[*]数据生成线程
[*]通过runJsCode方法执行匿名函数
[*]使用for循环生成1-5的序列数据
[*]java.lang.Thread.sleep(1000)实现1秒间隔(Rhino引擎特性)
[*]线程命名为"数据线程"便于调试识别
[*]日志记录线程
[*]使用独立的时间间隔(1.5秒)避免与数据线程同步
[*]通过new Date()获取当前时间戳
[*]线程命名"日志线程"增强可读性
[*]状态监控机制
[*]setInterval创建500ms的轮询检查
[*]使用isAlive()实时获取线程状态
[*]智能终止机制:当两个线程都完成时自动停止监控
[*]状态信息格式化输出,便于观察执行过程
[*]安全控制策略
[*]setTimeout设置10秒超时保护
[*]双重停止保障:stop()方法强制终止线程
[*]防止线程意外卡死导致程序挂起
执行流程主线程启动 → 创建子线程 → 启动状态监控 → 数据线程生成数据 → 日志线程记录时间 ↑ ↓ ↓ 强制停止 ← 状态检查 → 自动停止
注意事项
[*]线程休眠必须使用java.lang.Thread.sleep(),不能直接用JavaScript的setTimeout
[*]printl输出可能产生线程竞争,实际使用建议添加锁机制
[*]stop()是强制终止,可能导致资源未释放,生产环境建议使用标志位终止
[*]Rhino引擎的线程精度约为50ms,时间间隔不要设置过小
[*]线程名称在调试时显示,建议保持唯一性和描述性
页:
[1]