java:监控线程,当线程异常时自动重启线程
上一篇 /
下一篇 2012-07-24 13:04:39
/ 个人分类:java
所要监控的线程:
public class Basic extends Thread {
private String hostname = "";
private String username = "";
private String password = "";
private Long bizId = 0L;
private SqlMessageService sqlService;
public SqlMessageService getSqlService() {
return sqlService;
}
public void setSqlService(SqlMessageService sqlService) {
this.sqlService = sqlService;
}
private String commands;
public Basic(String threadName){
super();
this.setName(threadName);
}
public String getCommands() {
return commands;
}
public void setCommands(String commands) {
this.commands = commands;
}
public void run() {
while(true){
Connection conn = new Connection(hostname);
try {
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(
username, password);
if (isAuthenticated == false)
System.out.println("Authentication failed.");
Session sess = conn.openSession();
sess.execCommand(commands);
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(
stdout));
String line="";
while (true) {
line = br.readLine();
if (StringUtils.isNotBlank(line)){
System.out.println(line);
}else{
break;
}
}
sess.close();
conn.close();
sleep(5);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Date getDate(String url) throws Exception{
String[] sqls=url.split(",");
String time=sqls[0];
String[] parsePatterns = { "yyyy-MM-dd HH:mm:ss"};
Date date=DateUtils.parseDate(time, parsePatterns);
return date;
}
public String getHostname() {
return hostname;
}
public void setHostname(String hostname) {
this.hostname = hostname;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Long getBizId() {
return bizId;
}
public void setBizId(Long bizId) {
this.bizId = bizId;
}
}
监控线程
public class Monitor extends Thread {
private List monitoredThread; // 要监控的线程名
public Monitor(List monitoredThread) {
this.monitoredThread = monitoredThread;
}
public void run() {
while (true) {
monitor();
try {
TimeUnit.MILLISECONDS.sleep(2000);
} catch (InterruptedException e) {
// TODO 记日志
e.printStackTrace();
}
}
}
/**
* 监控主要逻辑
*/
private void monitor() {
for (int i = 0; i < monitoredThread.size(); i++) {
Thread.State state = monitoredThread.get(i).getState(); // 获得指定线程状态
// System.out.println(monitoredThread.get(i).getName() + "监控线程状态是:"
// + monitoredThread.get(i).getState());
/*
* 如果监控线程为终止状态,则重启监控线程
*/
if (Thread.State.TERMINATED.equals(state)) {
System.out.println(monitoredThread.get(i).getName()
+ "监控线程已经终止,现在开始重启监控线程!");
monitoredThread.get(i).start();
}
}
}
/**
* 测试方法
*/
public static void main(String[] args) {
Basic tm = new Basic("test");
tm.setCommands("tail -f XXXX.log");
tm.setHostname("IP");
tm.setPassword("XXXX");
tm.setUsername("XXXX");
tm.start();
Basic tm1 = new Basic("test1");
tm1.setCommands("tail -f XXXX.log");
tm1.setHostname("XXXX");
tm1.setPassword("XXXX^^");
tm1.setUsername("XXXX");
tm1.start();
List list = new ArrayList();
list.add(tm);
list.add(tm1);
Monitor m = new Monitor(list);
m.start();
}
}
TAG:
我来说两句
显示全部
内容
昵称
验证
提交评论