先说结论:
- 不能用Thread.stop()会抛出了java.lang.ThreadDeath异常,并且对锁定的对象进行了“解锁”,导致异步。它在JDK中已经被声明“过期/作废”的方法。
- hread.interrupt()不会中断线程,只是改变了标志位,即中断标志位置为true;
- 自己设置标志位停止线程时,注意可见性,用AtomicBoolean或者volatile boolean flag。
要点:
Thread同样提供了相关方法判断线程是否中断:
- isInterrupted(): 测试线程是否已经中断,但是不能清除状态标识。
- interrupted():测试当前线程是否中断。静态方法,与对象无关,只返回当前执行线程的状态(而不是点之前那个对象线程),如果连续执行两次,那么第二次调用将返回false,它执行后具有清除状态的功能,将状态清除变为false;