1.interrupt方法打断线程之后,该线程并不会停下来,而是继续运行,如果是wait状态和sleep状态则会抛出异常。
2.interrupt方法打断不在wait状态或sleep状态中的线程,该线程的打断标记为true。如果打断wait状态或sleep状态中的线程,该打断标记还是为false。但是可以在catch中利用interrupt进行设置打断标记,此时该线程的打断标记就为true。
3.如果该线程结束,其他线程获取该线程的打断标记则为false。
注意:这里获取打断标记都是用的isInterrupted方法,因为interrupted方法为将打断标记重置为false。
附录:
/** * 打断wait和sleep之后,处理异常之后,只有该线程能够获得true的打断标记 * 如果该线程结束,主线程只能获得false的标记 */ public class Test06 { public static void main(String[] args) throws InterruptedException { Object o = new Object(); Thread t1 = new Thread(() -> { synchronized (o) { try { o.wait(); } catch (InterruptedException e) { System.out.println(Thread.currentThread().isInterrupted()); Thread.currentThread().interrupt(); e.printStackTrace(); System.out.println(Thread.currentThread().isInterrupted()); System.out.println(Thread.currentThread().isInterrupted()); } } while (true) { } // try { // Thread.sleep(2000); // } catch (InterruptedException e) { // System.out.println(Thread.currentThread().isInterrupted()); // Thread.currentThread().interrupt(); // e.printStackTrace(); // System.out.println(Thread.currentThread().isInterrupted() + "====t1"); // } }, "t1"); t1.start(); Thread.sleep(100); t1.interrupt(); Thread.sleep(100); System.out.println(t1.isInterrupted() + "=====main"); } }