日期:2014-05-20  浏览次数:20795 次

~~~~求一个思路~~~~~高手进!!
做了个线程监听5个服务器的运行状态。5个服务器放在循环里,睡眠时间10秒(每10秒监听一次)Thread.currentThread().sleep(sleepTime)放在循环外,也就是说对5个服务器有同一个睡眠时间。

现在想如果其中一个服务器当掉,还让其他的服务器被10秒监听一次,让当掉的服务器下一次的监听时间变为60秒,如果60秒后还未正常运行,那就把它的睡眠时间改为600秒,其他正常运行的服务器不变,什么时候等当掉的这台服务器正常运行了,再让它恢复到10秒被监听一次,这个怎么做啊?有什么好的思路么?谢谢高手们了!

------解决方案--------------------
楼主为何不为每个服务器启用一个单独的线程呢?那样不是什么问题都解决了?
------解决方案--------------------
知道服务监听是被阻塞的吗?

你这样做已经违反了你的初衷:
如你监听服务1在第十行,服务2放在第十一行,依此类推,如果服务1没有响应,那么服务2-服务5都不会被响应,原因是:服务1的监听被阻塞,以下都不会被执行。

OK,如果你想清楚了,那么请你重写吧,你必须加4个单独监听。
OK,如果你想清楚了,那么请你给我加所有的分吧!
------解决方案--------------------
楼上的意思很明确啊,只要你要监听,线程必然阻塞,阻塞后后面的程序不能执行...
而且也不知道你连接属于TCP还是UDP,如果TCP断开,那么也会抛出异常,UDP,你就永远等待下去,直到服务器监听的到来!

其实这个要做还是开上五个线程比较合适,没个线程相互独立,sleep都不用写,因为组塞,所以写了也不用管。你要做的只是服务器发送标志的时间。