1

如果我有这样的线程:

Thread t = new Thread(myThread);
t.start();

private static Runnable myThread = new Runnable() {
    public void run() {
        try{
            String line=null;
            while ((line = eStream.readLine()) != null){
                //do something
            }
         }
         catch (Exception e){}
    }
};  

现在在while循环中发生了什么,有时会readLine()被挂起,因为它期待来自外部进程的输入。所以在那种情况下,我想做的是设置一个计时器,如果它到期,interrupt this thread tt.interrupt();

现在,当我尝试InterruptedException在 try 块之后捕获时,我收到编译时错误。有人可以告诉我在这种情况下,我怎样才能捕获中断异常?

谢谢

4

2 回答 2

2

中断不会释放阻塞的 readLine() 调用。你必须关闭流才能做到这一点。

您已经使用此行捕获了 InterruptedException(并忽略它)

catch (Exception e){}

这行不通

line = eStream.readLine().toString()

因为当您到达文件末尾时它会抛出 NullPointerException 。去除那个.toString()

于 2012-01-12T15:39:10.440 回答
2

来自InterruptedException的文档:

当一个线程等待、休眠或以其他方式暂停很长时间并且另一个线程使用 Thread 类中的中断方法中断它时抛出。

我怀疑你感兴趣的是InterruptedIOException

表示 I/O 操作已被中断。抛出 InterruptedIOException 以指示输入或输出传输已终止,因为执行它的线程被中断。

我会查看有关干净关闭 gdown 线程的JavaSpecialists 时事通讯,尤其是关于 IO 上阻塞的线程怎么办?它详细介绍了这一领域。

于 2012-01-12T15:39:44.693 回答