`
scanfprintf123
  • 浏览: 80559 次
  • 性别: 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  
这个,要看具体应用环境吧。。。。

相关推荐

    处理 InterruptedException1

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

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

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

    Java并发程序设计教程

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

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

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

    java并发编程分享

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

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

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

    JAVA InterruptedException

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

    InterruptedException和interrup

    理解并正确处理这个异常对于编写高效的并发代码至关重要。 首先,我们来讨论一下线程的中断。在Java中,每个线程都有一个中断标志,可以通过`Thread.interrupt()`方法设置。这个方法不仅会设置中断标志,还会在当前...

    [bugfix]重新理解Thread的InterruptedException

    本文将深入探讨`InterruptedException`异常,以及如何在实际编程中正确处理它。 首先,我们需要了解线程的中断机制。Java中的线程中断是一种协作机制,它并不强制停止一个线程,而是通过设置线程的中断状态来通知...

    Java线程协调运行操作实例详解

    - 必须正确处理InterruptedException,因为在wait()方法中可能会被中断,这需要在try-catch块中处理。 - 使用wait()、notify()和notifyAll()时,应确保在循环中调用,以防止错过唤醒信号。这是因为其他线程可能在...

    ColevatiTarefaThread:ColevatiTarefaThread

    此外,正确处理InterruptedException能确保线程在必要时优雅地停止。 10. **线程安全的数据结构**: `java.util.concurrent`包提供了线程安全的数据结构,如ConcurrentHashMap、CopyOnWriteArrayList等,它们在多...

    java中断线程的正确姿势完整示例.rar

    3. **捕获并处理InterruptedException**:对于那些会抛出`InterruptedException`的方法,我们通常需要在`try-catch`块中捕获它。捕获后,可以清除中断标志(因为这些方法会自动清除),然后根据需要处理中断情况,...

    java 多线程异常处理

    Java多线程异常处理是Java编程中不可或缺的一部分,特别是在并发编程场景下,正确处理异常能够保证程序的稳定性和健壮性。本实验报告主要涵盖了Java异常处理机制、多线程概念与实现,以及多线程同步问题。 首先,...

    java异常处理

    Java异常处理是编程中至关重要的一个环节,它用于管理和处理程序执行过程中可能出现的错误和异常情况。Java提供了丰富的异常类来...正确地处理异常可以帮助开发者快速定位和修复问题,避免程序因为未预期的错误而崩溃。

    A0402Handler发送消息和处理消息Message1

    * 能够正确地处理异步操作和线程同步问题 * 能够设计和实现高效、可靠的异步处理流程 Handler 的使用场景包括: * 后台任务的异步处理 * 网络数据的异步加载 * 图片的异步下载和处理 * 数据库的异步操作 Handler ...

    实验5异常处理.pdf

    7. `NumberFormatException`: 尝试将字符串转换为数字格式不正确时抛出。 8. `InterruptedException`: 当线程被中断时抛出。 5.2.3 自定义异常 为了处理特定于应用的错误情况,开发者可以创建自定义异常。这通常...

    Java第二十九——三十一讲总结-异常处理.doc

    ### Java异常处理详解 #### 一、异常的概念与分类 在Java编程中,**异常**是一种用来处理程序运行过程中可能出现的错误或者不寻常情况的机制。...理解并正确使用异常处理机制,对于编写高质量的Java应用至关重要。

Global site tag (gtag.js) - Google Analytics