監控重啓中止線程

   項目中有這樣一個場景,後臺中運行着幾組不同的生產線程,每組後臺線程負責生產不同的資源,填充到不同阻塞隊列中,供業務代碼異步調用,以提高程序運行速度。爲保證資源的正常生產,需要保證每組後臺生產線程出現異常終止情況時,可以被較爲即時的拉起,這時就需要對後臺生產線程進行心跳監控。以下爲線程監控的代碼:

package com.dear.simple.queue;

import java.lang.Thread.State;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.apache.log4j.Logger;
/**
 * 
 * @author lixiang
 *
 */
public class ThreadMonitor implements Runnable{
	
	private static final Logger LOG = Logger.getLogger(ThreadMonitor.class);
	private List<Thread> monitoredThreads;  //被監控的線程
	
	public ThreadMonitor(List<Thread> monitoredThreads) {
		this.monitoredThreads = monitoredThreads;
	}
	
	public void monitor(){
		for (Thread thread : monitoredThreads) {
			String tName = thread.getName();
		 	State tState = thread.getState();
		 	if(Thread.State.TERMINATED.equals(tState)){	//若被監控的線程爲終止狀態,則對其進行重啓
		 		LOG.info("describe : " + tName + "is terminated,start this thread");
		 		thread.start();
		 		LOG.info("describe : " +"start the thread " + tName + " success");
		 	}
		}
	}
	
	@Override
	public void run() {
		while(true){
			monitor();
			try {
				TimeUnit.MILLISECONDS.sleep(2000);
			} catch (InterruptedException e) {
				LOG.error("describe : " + "thread monitor error : " + e.getMessage());
			}
		}
		
	}
	
	
}

 在系統啓動時,初始化並開啓監控線程ThreadMonitor,並將需要被監控的線程列表傳入,這時,監控線程就可以定期的檢查後臺線程的運行情況了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章