java中interrupt的作用

243 阅读1分钟

Java 中 interrupt 的作用及示例

在 Java 中,interrupt 方法用于中断线程的执行,主要有以下几个作用:

  1. 中断标志:调用 interrupt() 方法会设置线程的中断标志。这意味着线程在下次调用 Thread.interrupted()isInterrupted() 时,会检测到中断状态。
  2. 中断阻塞操作:如果线程在执行阻塞操作(如 wait()sleep()join())时被中断,这些方法会抛出 InterruptedException,使线程能够通过捕获异常来清理资源或执行其他逻辑。
  3. 中断检测:在长时间运行的操作中,线程可以定期检查自己的中断状态,以便在被请求中断时及时停止操作。例如,可以在循环中使用 Thread.currentThread().isInterrupted() 来判断是否需要提前退出。
  4. 中断与响应:中断是一种协作机制,线程必须自己响应中断请求。它不会强制终止线程,而是需要线程自己处理被中断的情况。
示例代码

下面是一个简单的代码示例,演示了如何使用 interrupt 方法:

java
复制代码
class InterruptExample extends Thread {
    @Override
    public void run() {
        try {
            while (!isInterrupted()) {
                System.out.println("Thread is running...");
                // 模拟工作
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            System.out.println("Thread was interrupted, exiting...");
            // 处理中断的逻辑
        }
    }
}

public class Main {
    public static void main(String[] args) throws InterruptedException {
        InterruptExample thread = new InterruptExample();
        thread.start();

        // 主线程休眠2秒,然后中断子线程
        Thread.sleep(2000);
        thread.interrupt();

        // 等待子线程结束
        thread.join();
        System.out.println("Main thread finished.");
    }
}

在这个示例中,InterruptExample 线程会每秒打印一次信息。当主线程在2秒后调用 interrupt() 时,子线程会捕获 InterruptedException,执行清理逻辑,最终退出。通过这种方式,Java 提供了灵活的机制来管理线程的执行状态和响应中断请求。