Java线程中断是一种协作机制,即通过将中断请求发送给目标线程,让目标线程自行决定如何响应该请求。Java中断的机制基于一个boolean变量,即中断状态标识(interrupt status flag),当调用线程的interrupt()方法时,该标识被设置为true,而目标线程则可以通过isInterrupted()方法获取该标识来检查是否有中断请求。以下是一个简单的Java线程中断的例子:
public class MyThread extends Thread {
public void run() {
while (!isInterrupted()) {
try {
Thread.sleep(1000);
System.out.println("I am running...");
} catch (InterruptedException e) {
System.out.println("I am interrupted!");
interrupt(); // 在捕获InterruptedException异常后重新设置中断状态标识
}
}
}
}
public class Main {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t.interrupt(); // 中断线程
}
}
在这个例子中,我们创建了一个MyThread类继承自Thread类,并在其run()方法中使用了isInterrupted()方法来检查中断状态标识。当该标识为false时,线程继续执行,否则线程退出循环,结束执行。在run()方法中还使用了try-catch语句捕获InterruptedException异常,这是由于线程在等待阻塞状态时可能会被中断而抛出该异常,因此在捕获该异常后重新设置中断状态标识。在主线程中,我们创建了一个MyThread实例,并在5秒后调用其interrupt()方法来中断该线程的执行。当MyThread线程接收到中断请求后,便会退出循环,并输出"I am interrupted!"的提示信息。