获取 InterruptedException 以忽略中断
Getting InterruptedException to ignore the interrupt
我是多线程的新手(一般情况下和 Java 中),只是想尝试处理中断异常的一些基本方面。
当我 运行 下面的代码时,我得到以下输出 -
1:再见,世界!
1:你好,世界!
2:再见,世界!
3:再见,世界!
4:再见,世界!
5:再见,世界!
但我不明白为什么线程 1("Hello, World!")线程正在停止,因为它的 Catch 子句是空的(我认为这意味着它会忽略 InterruptedException
并完成线程)。
我确信我遗漏了一些基本的东西,但我不知道它是什么。
感谢您提供的任何帮助!
public class GreetingProducer implements Runnable
{
String greeting;
public GreetingProducer (String greetingIn)
{
greeting = greetingIn;
}
public void run()
{
try
{
for (int i = 1; i <=5; i++)
{
System.out.println(i + ": " + greeting);
Thread.sleep(500);
}
}
catch (InterruptedException e)
{
}
}
public static void main(String[] args)
{
Runnable r1 = new GreetingProducer("Hello, World!");
Runnable r2 = new GreetingProducer("Goodbye, World!");
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
t1.interrupt();
}
}
catch
子句可能为空,但 InterruptedException
正在被捕获并执行 catch 块。
因为异常被吞没,所以没有执行任何操作,但是随后代码像任何其他异常一样退出 try - catch
块。
如果您在 catch
块中有指令,它将被执行。
想要不被打扰的睡眠,可以使用Guava的sleepUninterruptibly方法:
for (int i = 1 ; i <= 5 ; i++) {
System.out.println(i + ": " + greeting);
Uninterruptibles.sleepUninterruptibly(500, TimeUnit.MILLISECONDS);
}
那么 try - catch
块就变得不必要了。
我是多线程的新手(一般情况下和 Java 中),只是想尝试处理中断异常的一些基本方面。
当我 运行 下面的代码时,我得到以下输出 -
1:再见,世界! 1:你好,世界! 2:再见,世界! 3:再见,世界! 4:再见,世界! 5:再见,世界!
但我不明白为什么线程 1("Hello, World!")线程正在停止,因为它的 Catch 子句是空的(我认为这意味着它会忽略 InterruptedException
并完成线程)。
我确信我遗漏了一些基本的东西,但我不知道它是什么。
感谢您提供的任何帮助!
public class GreetingProducer implements Runnable
{
String greeting;
public GreetingProducer (String greetingIn)
{
greeting = greetingIn;
}
public void run()
{
try
{
for (int i = 1; i <=5; i++)
{
System.out.println(i + ": " + greeting);
Thread.sleep(500);
}
}
catch (InterruptedException e)
{
}
}
public static void main(String[] args)
{
Runnable r1 = new GreetingProducer("Hello, World!");
Runnable r2 = new GreetingProducer("Goodbye, World!");
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
t1.interrupt();
}
}
catch
子句可能为空,但 InterruptedException
正在被捕获并执行 catch 块。
因为异常被吞没,所以没有执行任何操作,但是随后代码像任何其他异常一样退出 try - catch
块。
如果您在 catch
块中有指令,它将被执行。
想要不被打扰的睡眠,可以使用Guava的sleepUninterruptibly方法:
for (int i = 1 ; i <= 5 ; i++) {
System.out.println(i + ": " + greeting);
Uninterruptibles.sleepUninterruptibly(500, TimeUnit.MILLISECONDS);
}
那么 try - catch
块就变得不必要了。