设置中断原因,同时中断线程
感谢您的帮助和支持,我面临一个问题,我有两个线程,一个是定时器线程,另一个是文件读取器线程。现在我的主程序正在调用这两个线程。定时器线程在超时时中断主程序,并且如果存在一些IO错误,则文件读取器线程调用主线程。所以现在问题进入了,主程序必须知道是谁启动了中断,打印一些中断状态可以说。那么我该如何实现这一目标呢?以下是我不想使用的几件事情。设置中断原因,同时中断线程
- 其用于在超时设置一个标志,另一个标志IO误差(由于我的主程序是巨大的,并具有几个部分,我不能到处做这种检查),其具有一个成员变量集合
- 每个线程与状态代码和主程序读取中断(我可以这样做,但我仍然需要维护线程对象以获取状态,并且我的文件读取器线程很多,所以我必须迭代每个线程以找到一个中断)。
我会很感激你的帮助,甚至除了中断以外的其他方式也很好。
我这样做,通过声明一个异常变量,然后我重新抛出异常,如果等待线程获取该异常变量被设置中断:你用计时器线程打断主要的意思
IOException ioex;
synchronized(lockObject) {
while(true) {
try {
lockObject.wait();
} catch(InterruptedException e) {
if(ioex != null) {
throw ioex;
}
}
... normal handling ...
}
}
但是你的run()方法,dosent支持抛出任何异常,因为它在Thread.run()中的声明。那么如何重新抛出? – 2011-02-28 06:48:40
用代码片段更新了线程.....谢谢 – 2011-02-28 07:05:28
请让我知道你是否需要更清晰.......... – 2011-02-28 10:42:29
程序?你想要在主程序中进行的任何处理结束吗?为什么定时器或文件读取线程不能生成输出(或者,如果这是事件驱动程序,则将输出发布到事件处理线程)。我想我们需要更多关于程序架构的信息来提出任何建议。 – 2011-02-28 06:29:10
信号如何? – 2011-02-28 06:36:17
将输出发布到Even处理线程?嗯,实际上即时创建n个线程来执行并发文件操作,如果我期待他们每个输出形式,那么我必须等待每个线程输出只有那么我可以创建并触发下一个线程,所以它dosent采取真正的多线程优势并非如此。我需要的是我想创建这n个线程,如果有任何错误,他们应该回到我身边,我需要哪个线程(说文件名)和什么错误。顺便说一下,我所指的主程序是事件处理线程在这里。 – 2011-02-28 06:42:59