我是多线程的新手(一般和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();
}
}
答案 0 :(得分:3)
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
块变得不必要了。