`
scanfprintf123
  • 浏览: 81053 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

怎么正确处理InterruptedException

    博客分类:
  • Java
阅读更多

在多核的时代,我们开始编写并发程序,于是碰到了InterruptedException,SUN的java文档告诉我们,当一个线程在sleep(),wait()或者join()的时候,如果被其他线程中断(通过thread.interrupt()方法),线程内部都会抛出这个InterruptedException异常。


在知道了来龙去脉后,我们开始处理InterruptedException异常,于是,我们有了下面的代码:

 

try
{
     Thread.sleep(1000);
}catch(InterruptedException ex)
{
      logger.error("thread interrupted",ex);
      throw ex;//re-throw 
}

 

上面的代码看起来很正确,没有吃掉异常,有记录异常信息并重新抛出了该异常。但是,对于InterruptedException来说,却有着细小的差别。假设我们有如下代码:

 

public class TestThread extends Thread
{

    @Override
    public void run()
    {
        try
        {
            doSth();
        }
        catch (Exception ex)
        {
            // log exception info
        }

        try
        {
            doSthElse();
        }
        catch (Exception e)
        {
            // log exception info
        }
    }

    public synchronized void doSthElse() throws Exception
    {
        // simulate doing sth else here

        // and then wait
        wait();
    }

    public void doSth() throws Exception
    {
        try
        {
            // simulate doing sth here

            // and sleep a while
            Thread.sleep(1000);
        }
        catch (InterruptedException ex)
        {
            // log exception info
            throw ex;
        }
    }
}

 

 

如果,我们在doSth()的时候,线程被中断了,那么,在doSth()方法里进行Thread.sleep(1000)的时候,InterruptedException会被抛出来,但是,doSthElse()依然被执行,等待被其他线程唤醒,可是,该线程已经被中断了。

 

所以,在处理InterruptedException的时候,不要吝啬,再加上一句Thread.currentThread().interrupt()吧。

0
1
分享到:
评论
1 楼 hobitton 2011-09-26  
这个,要看具体应用环境吧。。。。

相关推荐

    InterruptedException如何解决.md

    正确处理InterruptedException异常是确保多线程程序稳定运行的关键。在处理InterruptedException时,需要考虑以下几点: 1. 选择合适的处理方法,是捕获并处理异常还是继续执行并恢复中断状态。 2. 在捕获到...

    处理 InterruptedException1

    InterruptedException 是一种检查异常(checked exception),不能被忽略,因为它提供了一个机会来正确地处理中断请求。 中断机制是 Java 语言中的一种协作机制,它允许一个线程请求另一个线程停止正在做的事情。当...

    Java处理InterruptedException异常的理论与实践

    总的来说,理解并正确处理`InterruptedException`是编写健壮、响应性强的Java并发程序的关键。当你的代码调用了可能会抛出`InterruptedException`的方法时,应该考虑你的方法是否也需要处理中断,以便于实现可取消的...

    com.pureharmony.exception.OsUpdateRollbackException.md

    休眠时间应根据实际情况设定,使用休眠机制需要正确处理InterruptedException异常。如果重试次数达到上限或者问题依旧无法解决,可能需要进一步的处理措施,比如通知管理员等。 处理OsUpdateRollbackException异常...

    Java并发程序设计教程

    响应线程中断应正确处理InterruptedException异常,不应简单地忽略或重新抛出。创建线程时要注意提供线程名,否则在多线程环境中排查问题时会非常困难。 在多线程编程中,还应当避免创建不必要的线程,因为线程的...

    java多线程核心技术_完整版

    正确处理InterruptedException,可以使程序在必要时优雅地终止线程。 这个"Java多线程编程核心技术_完整版.pdf"教程应该涵盖了上述所有知识点,深入学习后,你将能够熟练地运用Java进行多线程编程,解决实际开发中...

    java并发编程分享

    在并发编程中,正确处理InterruptedException是至关重要的。 以上就是Java并发编程的一些核心知识点。在实际开发中,熟练掌握这些概念和技巧,可以编写出高效、稳定的并发程序,提升系统的整体性能。在不断学习和...

    求职笔试大全、线程编程方面

    理解中断机制并正确处理InterruptedException是编写健壮代码的必要步骤。 10. **线程本地存储**:ThreadLocal提供线程局部变量,每个线程都有自己的副本,避免了多线程间的共享数据冲突。 在准备求职笔试时,以上...

    JAVA InterruptedException

    总之,理解和正确处理`InterruptedException`是Java多线程编程中的关键技能,它涉及到线程的协作和资源管理,对于编写健壮的并发程序至关重要。在实际开发中,应根据具体情况选择合适的中断处理策略,确保程序的稳定...

    java.lang.InterruptedException(解决方案).md

    如果不重新抛出该异常,则需要确保已经对中断进行了正确处理。在某些情况下,开发者可能会选择忽略InterruptedException,但在多数业务场景中,合理的处理中断异常是保证程序健壮性的重要部分。 在实际开发中,处理...

    InterruptedException(解决方案).md

    13. InterruptedException与性能优化:在处理InterruptedException时,应当注意,频繁地中断和异常处理可能会对程序的性能产生影响。因此,合理地安排线程的执行计划和中断处理,是提高程序效率的一个重要方面。 14...

    InterruptedException解决办法.md

    因此,即使在处理了`InterruptedException`之后,线程的中断标志位仍可能被设置,开发者需要在适当的位置检查这一状态,确保线程正确响应中断请求。 代码示例中展示的是通过`Thread.sleep()`方法模拟一个阻塞操作,...

    InterruptedException.md

    5. Java的并发工具库,如ExecutorService、Future和CompletableFuture提供了更高级的并发任务处理方式,并能够在任务执行结束时处理InterruptedException。 - 例如,使用Future时,可以通过Future.get()方法等待...

Global site tag (gtag.js) - Google Analytics