详细说明
- 线程对象创建
- 使用
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,时间间隔不要设置过小
- 线程名称在调试时显示,建议保持唯一性和描述性