在循环中调用url.openStream()时停止线程执行

时间:2019-01-28 14:35:49

标签: java concurrency interrupt interrupt-handling

编辑:我知道Thread.interrupt()的作用。

    我中断线程时,
  • while (!Thread.currentThread().isInterrupted())不会退出。
  • 我还试图从url.openStream()中捕获异常;当。。。的时候 线程被中断(绝望,也许这是一个阻塞方法, 不是),然后退出循环,没有任何成功。

该应用程序创建一个{strong>连续读取 Thread的{​​{1}}。 URL被中断3秒后,不幸的是继续执行。

如何停止执行线程

代码(Main.java,MyRunnable.java):

Thread

3 个答案:

答案 0 :(得分:2)

基本上,您的MyRunnable线程在睡眠期间被中断。 InterreuptedException被抛出但被抓住。顺便说一句,赶上Exception是一个坏习惯,您不应该这样做。 从javadoc中:“抛出此异常时,将清除当前线程的中断状态”。 因此,您的while循环将永远不会看到该标志。

答案 1 :(得分:1)

使用简单的Thread.sleep调用替换对sleepOneSec方法的调用。在while循环的外部 处捕获InterruptedException。这将导致循环自然退出:

try {
    while (true) {
        Thread.sleep(1000);
        readFromUrl(url);
        System.out.println("Read from " + website);
    }
} catch (InterruptedException e) {
    System.out.println("Script: Interrupted, exiting.");
}

答案 2 :(得分:0)

我删除了MyRunnable.sleepOneSec,您的代码开始工作。