java InterruptedException 异常中断的实现

 更新时间:2023年08月04日 09:04:39   作者:FLGB  
本文主要介绍了java InterruptedException 异常中断的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

InterruptedException

当一个线程在被阻塞状态(如调用 Thread.sleep() 或 Object.wait() 方法)时,如果其他线程调用该被阻塞线程的 interrupt() 方法,那么被阻塞线程会被中断,并抛出 InterruptedException 异常。

package com.lf.java.basic.concurrent;
class MyRunnable implements Runnable {
    @Override
    public void run() {
        try {
            // 被阻塞的线程,调用sleep方法
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            // 被中断时会抛出InterruptedException异常
            System.out.println("Thread was interrupted.");
            // 可以选择终止线程的执行
            // return;
        }
        System.out.println("被唤醒了处理Exception后可以自由选择做什么事");
        System.out.println("Thread completed.");
    }
}
public class InterruptedExceptionSample {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
        // 主线程休眠一段时间后,中断被阻塞的线程
        try {
            Thread.sleep(2000);
            thread.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

输出:

Thread was interrupted.
被唤醒了处理Exception后可以自由选择做什么事
Thread completed.

1、被阻塞的线程处于阻塞状态,比如调用了 Thread.sleep() 或 Object.wait() 方法。

2、其他线程调用了被阻塞线程的 interrupt() 方法。

3、被阻塞线程会被唤醒,它会检查自己是否被中断,如果被中断,就会抛出 InterruptedException 异常。

4、此时,被阻塞线程可以选择如何处理这个异常,比如捕获异常并做相应的处理,或者继续向上层抛出异常。

注意:
中断是一种协作机制,它并不能直接终止一个线程的执行。被中断的线程需要在适当的时候检查自己是否被中断,并做出相应的响应。在处理 InterruptedException 时,可以选择终止线程的执行或采取其他合适的措施来处理中断。(存在不能被中断的阻塞 I/O 调用, 应该考虑选择可中断的调 =用)。

interrupted() 方法(静态方法)

public static boolean interrupted()

interrupted() 方法是一个静态方法,用于检测当前线程是否被中断,并且会清除中断状态。当一个线程被中断时,该线程的中断状态会被设置为 true。当你调用 interrupted() 方法时,它会返回当前线程的中断状态,并且同时将中断状态重置为 false。这意味着,如果连续多次调用 interrupted() 方法,只有第一次会返回 true,之后的调用将返回 false,除非线程又被重新中断。

public class InterruptedSample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                if (Thread.interrupted()) {
                    System.out.println("Thread is interrupted.");
                } else {
                    System.out.println("Thread is not interrupted.");
                }
            }
        });
        thread.start();
        // 主线程休眠一段时间后,中断被阻塞的线程
        try {
            Thread.sleep(2000);
            thread.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

isInterrupted() 方法(实例方法)

public boolean isInterrupted()

isInterrupted() 方法是一个实例方法,用于检查当前线程的中断状态,但不会清除中断状态。当你调用 isInterrupted() 方法时,它会返回当前线程的中断状态,并且不会改变中断状态。因此,多次调用 isInterrupted() 方法会一直返回相同的中断状态,不会重置为 false。

public class IsInterruptedSample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                if (Thread.currentThread().isInterrupted()) {
                    System.out.println("Thread is interrupted.");
                } else {
                    System.out.println("Thread is not interrupted.");
                }
            }
        });
        thread.start();
        // 主线程休眠一段时间后,中断被阻塞的线程
        try {
            Thread.sleep(2000);
            thread.interrupt();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

到此这篇关于java InterruptedException 异常中断的实现的文章就介绍到这了,更多相关java InterruptedException 异常中断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈Java线程池是如何运行的

    浅谈Java线程池是如何运行的

    这篇文章主要介绍了浅谈Java线程池是如何运行的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Java Socket编程服务器响应客户端实例代码

    Java Socket编程服务器响应客户端实例代码

    这篇文章主要介绍了Java Socket编程服务器响应客户端实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • java实现ThreadLocal线程局部变量的实现

    java实现ThreadLocal线程局部变量的实现

    本文主要介绍了java实现ThreadLocal线程局部变量的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Java Swing JComboBox下拉列表框的示例代码

    Java Swing JComboBox下拉列表框的示例代码

    这篇文章主要介绍了Java Swing JComboBox下拉列表框的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • RabbitMQ 的消息持久化与 Spring AMQP 的实现详解

    RabbitMQ 的消息持久化与 Spring AMQP 的实现详解

    这篇文章主要介绍了RabbitMQ 的消息持久化与 Spring AMQP 的实现剖析详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 浅析Mysql中的视图

    浅析Mysql中的视图

    这篇文章主要介绍了浅析Mysql中的视图,视图是从一个或者多个表中导出的表,视图的行为与表非常相似,在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录,需要的朋友可以参考下
    2023-05-05
  • Java中scheduleAtFixedRate的用法

    Java中scheduleAtFixedRate的用法

    如何正确使用Java中的scheduleAtFixedRate是一篇介绍Java中定时任务调度器的文章。它详细介绍了scheduleAtFixedRate方法的用法、参数及作用,并给出了一些实例以帮助读者更好地理解其使用。本文为Java开发人员提供了一些实用的技巧,帮助他们更好地管理和控制定时任务
    2023-04-04
  • JAVA容器集合全面解析(Collection和Map)

    JAVA容器集合全面解析(Collection和Map)

    这篇文章主要介绍了JAVA容器集合全面解析(Collection和Map)本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • IDEA 2022最新激活码注册码超详细教程(亲测激活有效)

    IDEA 2022最新激活码注册码超详细教程(亲测激活有效)

    这篇文章主要介绍了IDEA 2022最新激活码超详细教程(亲测激活至2099年),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Spring+MongoDB实现登录注册功能

    Spring+MongoDB实现登录注册功能

    这篇文章主要为大家详细介绍了Spring+MongoDB实现登录注册功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07

最新评论