一.中断概述
这篇文章主要记录使用 interrupt() 方法中断线程,以及如何对InterruptedException进行处理。感觉对InterruptedException异常进行处理是一件谨慎且有技巧的活儿。
Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。
因为它们太暴力了,是不安全的,这种暴力中断线程是一种不安全的操作,因为线程占用的锁被强制释放,极易导致数据的不一致性。
举个栗子来说明其可能造成的问题。
public class ThreadTest { public static void main(String[] args) throws InterruptedException { StopThread thread = new StopThread(); thread.start(); // 休眠1秒,确保线程进入运行 Thread.sleep(1000); // 暂停线程 thread.stop(); // thread.interrupt(); // 确保线程已经销毁 while (thread.isAlive()) { } // 输出结果 thread.print(); } private static class StopThread extends Thread { private int x = 0; private int y = 0; @Override public void run() { // 这是一个同步原子操作 synchronized (this) { ++x; try { // 休眠3秒,模拟耗时操作 Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } ++y; } } public void print() { System.out.println("x=" + x + " y=" + y); } } }