首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让InterruptedException忽略中断

让InterruptedException忽略中断
EN

Stack Overflow用户
提问于 2015-02-01 19:04:42
回答 1查看 443关注 0票数 0

我对多线程(在一般情况下和在Java中)都很陌生,只是尝试处理中断异常的一些基本方面。

当我运行下面的代码时,我得到了以下输出-

1:再见,世界!1:你好,世界!2:再见,世界!3:再见,世界!4:再见!5:再见,世界!

但是我不明白为什么线程1(“你好,世界!”)线程正在停止,因为它的Catch子句是空的(我认为这意味着它将忽略InterruptedException,只需完成线程)。

我肯定我错过了一些基本的东西,但我只是不知道它是什么。

感谢您提供的任何帮助!

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-01 19:08:42

catch子句可能是空的,但是正在捕获InterruptedException并执行catch块。

由于异常被吞没,因此不执行任何操作,但是代码退出try - catch块,就像退出任何其他异常一样。

如果您在catch块中有指令,它将被执行。

如果您想不间断地睡觉,可以使用番石榴的sleepUninterruptibly方法:

代码语言:javascript
复制
for (int i = 1 ; i <= 5 ; i++) {
    System.out.println(i + ": " + greeting);
    Uninterruptibles.sleepUninterruptibly(500, TimeUnit.MILLISECONDS);
}

然后就没有必要使用try - catch块了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28266575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档