打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
请教线程监控的问题
在一个多线程的环境下,有10个Timer,TimeTask线程在运行,现在希望写一个监控线程来监控这10个线程是否仍然还在(我的意思是可能其中的某个Timer线程因为某鞋原因当掉了,再也起不来,那么就只有9个Timer在跑了)。这个监控线程应该怎么写呢,如何才能知道还剩下几个线程在跑?请!
--------------------------------------
让每个线程定期来报到吧,超时不到者,杀!
-------------------------------------
你自己实现一个 ThreadGroup, 重载它的 ExceptionHandler, 然后那些线程都构造为从属于这个 ThreadGroup, 这样它们如果发生异常, 就会调用你的 ExceptionHandler, 你也就知道它们出问题了.
通常情况下线程如果不出异常, 都是在正常运行. 如果出了异常也没有通知你的Handler, 那就很可能是整个JVM都崩溃了, 也不可能再执行其他维护逻辑了. 所以这个路子应该能满足现实要求.
------------------------------------
谢谢楼上
ThreadGroup我也考虑过,但有两个问题,一方面ThreadGroup在Java中并不是很成功,另外还有一个重要的问题是我的线程是Timer(项目规定),不是Thread,Thread在构造函数的时候可以指定ThreadGroup,但是Timer并没有这样的构造函数,我不知道如何把Timer归进一个ThreadGroup。
另外请问楼上你所谓的重载ExceptionHander是在什么地方重载,不是很明白,谢谢
------------------------------------
重载 [url]http://java.sun.com/javase/6/docs/api/java/lang/ThreadGroup.html#uncaughtException(java.lang.Thread, java.lang.Throwable)[/url] 可以捕获线程的异常.
哦, 才发现 1.5 以后可以给 Thread 直接设置 UncaughtExceptionHandlerhttp://java.sun.com/javase/6/docs/api/java/lang/Thread.html#setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler) 了.
另外看了一下 java.util.Timer, 似乎你要知道它是否正常运行的话, 可以schedule一个什么都不做的task, 如果抛出 IllegalStateException 则该 Timer 已经出问题, 如果正常返回则应该可以断定还在正常运行.
------------------------------------
用心跳的方法来检测.
------------------------------------
要在你的线程中加上 执行的逻辑断点,每次执行到这个地方更新一下状态值,然后监视线程检查这个状态值。
Java代码 
class Th implements Runnable {
Date checkDate = null;
public void run(){
while (true) {
checkDate=new Date();
try {Thread.sleep(10000);} catch(Exception e) {}
}
}
}
boolean checkLive(Th th) {
long tick = System.currentTimeMillis();
if (tick - th.checkDate.getTime() > 10000) {
return false;
}
return true;
}
------------------------------------
请问楼上CheckLive方法检查的是执行时间,这个会不会有问题,如果我在执行的时间很长而sleep的时间很短的话似乎会有问题,另外请问如果我已经拥有了某个Thread的引用,我想停掉这个线程应该用什么方法?stop()和destroy()是不被推荐的
------------------------------------
比较安全简单的方案是:
Timer只用一个就好,定期启动工作线程,
每个工作线程只做一次任务然后就退出,
下一次任务则由定时器启动新的线程来完成。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux线程的状态与调度
范例解说Java里的线程概念与线程同步技术(二) - JAVA专栏
Java中的线程组
欢迎光临猫小专区
初学Java多线程:用Thread类创建线程
java UncaughtExceptionHandler 处理线程意外中止
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服