我对多线程(在一般情况下和在Java中)都很陌生,只是尝试处理中断异常的一些基本方面。
当我运行下面的代码时,我得到了以下输出-
1:再见,世界!1:你好,世界!2:再见,世界!3:再见,世界!4:再见!5:再见,世界!
但是我不明白为什么线程1(“你好,世界!”)线程正在停止,因为它的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();
}
}发布于 2015-02-01 19:08:42
catch子句可能是空的,但是正在捕获InterruptedException并执行catch块。
由于异常被吞没,因此不执行任何操作,但是代码退出try - catch块,就像退出任何其他异常一样。
如果您在catch块中有指令,它将被执行。
如果您想不间断地睡觉,可以使用番石榴的sleepUninterruptibly方法:
for (int i = 1 ; i <= 5 ; i++) {
System.out.println(i + ": " + greeting);
Uninterruptibles.sleepUninterruptibly(500, TimeUnit.MILLISECONDS);
}然后就没有必要使用try - catch块了。
https://stackoverflow.com/questions/28266575
复制相似问题