java线程中断自动重启_java:监控线程,当线程异常时自动重启线程

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:

我来说两句

显示全部

d8a3dac35532145b347031a8fb402eba.gif

4d73fc83cb27b31041650c043e06fdc8.gif

5d06f4dc9b08a7e1fecdedaf9fe87c66.gif

659391f05d11818e0d3bd694a6d99ddc.gif

f27d7d9f67d98cc858fe74ff4d76554e.gif

b0d82b880d66765dd2a1af173b20f406.gif

e87f042c31e114675541bb49e0fbf138.gif

97a372eda248bf63679ecf2d47467589.gif

a14a392968e29ace4cb2ca390d53264e.gif

ff31a40db0d852c3704276b17a1dd158.gif

46298ad80746c3790e9535ce3396efec.gif

ef97f2303f935b723744c0c99db267f8.gif

46add61d58ae5b455d8994b1485357d3.gif

701ffdce43c5ac45c241dba6a7ae431d.gif

4ac0c1a50de5d21a8087006d0295547a.gif

e54bbadbdbb00b0b5cc4182352ca2352.gif

afb655844bdfda4cf47fef6d239f009d.gif

bf5c12b671f1179ba425de53370ebd3d.gif

865ad24093d248b0ec3b85ea66a6aaa7.gif

ab80f8b6419577f8a8ad7bb690794024.gif

内容

昵称

验证

ada834077f6a48ad60a11ec0354fde86.png

提交评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值