Java 线程的中断机制


简单回顾一下 Java 的中断机制

Java 中的线程 Thread 有以下三个方法

public void interrupt()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void interrupt() {
if (this != Thread.currentThread())
checkAccess();

synchronized (blockerLock) {
Interruptible b = blocker;
if (b != null) {
interrupt0(); // Just to set the interrupt flag
b.interrupt(this);
return;
}
}
interrupt0();
}

public static boolean interrupted()

1
2
3
public static boolean interrupted() {
returncurrentThread().isInterrupted(true);
}

isInterrupted()

1
2
3
public boolean isInterrupted() {
return isInterrupted(false);
}
方法 作用
interrupt() 中断线程
当线程处于 Runnable 状态时,调用该方法中断该线程,会使得 isInterrupted() 方法返回 true
当线程处于 Block 或者 Wait 阻塞状态时,如果是通过 thread.wait(),thread.join(),Thread.sleep() 方法处于阻塞状态时,则会抛出 InterruptedException,如果是通过 LockSupport.park() 方法使线程处于阻塞状态,则不会抛出 InterruptedException
interrupted() 静态方法,作用于调用该方法的当前线程,这个方法的命名用的是一般过去时,所以返回的值代表的是「线程是否被中断过」并且会清除掉该线程的中断状态
isInterrupted() 公开方法,作用于调用该方法的线程对象,返回值代表的是「调用该方法的线程是否被中断过」,但不会清除该线程的中断状态
作者

PPTing

发布于

2022-02-17

更新于

2022-02-17

许可协议

评论