在中断线程时设置中断原因

时间:2011-02-28 06:19:36

标签: java multithreading interrupt

感谢所有的帮助和支持,我遇到的问题是,我有两个线程,一个是Timer线程,另一个是一些File Reader线程。现在我的主程序正在调用两个线程。定时器线程在超时时中断主程序,如果存在一些IO错误,文件读取器线程将调用主线程。所以现在问题出现了,主程序必须知道是谁解雇了中断,打印一些中断状态就可以了。那么我该如何实现呢?以下是我不想使用的一些事情。

  1. 用于设置超时的标志和IO错误的另一个标志(因为我的主程序很大并且有几个部分,我无法在任何地方进行检查)
  2. 每个线程都有一个成员变量设置状态代码,主程序读取中断。(我很好,但我仍然需要维护线程对象来获取状态,我的文件读取器线程是很多,所以我必须迭代每个线程才能找到被中断的那个。)
  3. 我很感激你对此的帮助,甚至除了中断以外的其他方式也很好。

1 个答案:

答案 0 :(得分:0)

我是通过声明一个Exception变量来做的,然后如果等待的线程得到一个设置了Exception变量的中断,我会重新抛出异常:

IOException ioex;

synchronized(lockObject) {
    while( true ) {
        try {
            lockObject.wait();
        } catch( InterruptedException e ) {
            if( ioex != null ) { 
                throw ioex;
            }
        }
        ... normal handling ...
    }
}