业务系统有多个线程在运行,为了防止线程挂掉,需要监控线程运行情况,在线程挂掉以后重新启动它。
提示:先排错,再容错,这个方式只是用来兜底的。
监控进程,遍历已经注册的线程,发现挂掉就重新创建并启动:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TimerTask;
/**
* 监控线程 挂掉就重启
*/
public class Monitor extends TimerTask {
//线程列表
final Map<String, Thread> threads = new HashMap<>();
@Override
public void run() {
// 遍历
Set<String> centralNumbers = threads.keySet(); // map.keySet()返回key的集合
for (String centralNumber : centralNumbers) {
Thread thread = threads.get(centralNumber);
if (!thread.isAlive()) {
// 创建线程实体
CentralServer centralServer = new CentralServer(centralNumber);
// 创建线程
Thread thead = new Thread(centralServer);
// 注册监视器
register(centralNumber, thead);
// 开启
thead.start();
}
}
}
// 注册监视器
public void register(String centr