用于中断进程的Java中断线程

时间:2012-01-12 15:35:02

标签: java multithreading interrupted-exception

如果我有这样的话:

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();

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

谢谢

2 个答案:

答案 0 :(得分:2)

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

您正在使用此行

捕获InterruptedException(并忽略它)
catch (Exception e){}

这不起作用

line = eStream.readLine().toString()

因为当你到达文件末尾时会抛出NullPointerException。删除.toString()

答案 1 :(得分:2)

来自InterruptedException的文档:

  

当线程正在等待,休眠或以其他方式暂停时,抛出该异常   很长时间和另一个线程使用中断方法中断它   在Thread类中。

我怀疑你感兴趣的是InterruptedIOException

  

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

我会查看this JavaSpecialists newsletter干净利落的gdown线程,特别是在IO上阻止的线程怎么样?,它详细介绍了这个区域。