interrupt java_关于java中的interrupt
发布日期:2022-02-03 15:24:58 浏览次数:6 分类:技术文章

本文共 1280 字,大约阅读时间需要 4 分钟。

一、概念

java中线程有开始,运行(就绪,运行),阻塞,等待,终止这几种状态。其中在等待的时候可以通过设置中断标志位来唤醒线程。一般情况下等待状态的线程检查到中断标志被置位,则会抛出InterruptedException异常,捕获异常,复位中断标志,可以使线程继续运行。

thread.interrupt()  设置中断标识位

Thread.interrupt() 回复中断标识位

thread.isInterrupted()  返回中断标识位

什么情况下可以使用Interrunpt

(1)如果线程在调用 Object 类的 wait()、wait(long) 或 wait(long, int) 方法,或者该类的 join()、join(long)、join(long, int)、sleep(long) 或 sleep(long, int) 方法过程中受阻,则其中断状态将被清除,它还将收到一个InterruptedException异常。这个时候,我们可以通过捕获InterruptedException异常来终止线程的执行,具体可以通过return等退出或改变共享变量的值使其退出。

(2)如果该线程在可中断的通道上的 I/O 操作中受阻,则该通道将被关闭,该线程的中断状态将被设置并且该线程将收到一个 ClosedByInterruptException。这时候处理方法一样,只是捕获的异常不一样而已。

二、代码

public static void main(String[] args) {

Thread thread = new Thread(new Runnable() {

@Override

public void run() {

try {

TimeUnit.SECONDS.sleep(1000);

} catch (InterruptedException e) {

System.out.println(e.getStackTrace());

System.out.println("thread is interrupt ? >>> " + Thread.currentThread().isInterrupted());

Thread.currentThread().interrupt();

System.out.println("thread is interrupt ? >>> " + Thread.currentThread().isInterrupted());

}

}

});

thread.start();

try {

TimeUnit.SECONDS.sleep(5);

} catch (InterruptedException e) {

}

thread.interrupt();

}

输出结果:

[Ljava.lang.StackTraceElement;@1e0c386d

thread is interrupt ? >>> false

thread is interrupt ? >>> true

转载地址:https://blog.csdn.net/weixin_35600779/article/details/114344764 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql 清理归档日志_oracle归档日志清理
下一篇:什么是java环境变量_什么是java环境变量

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月16日 22时04分06秒