线程a与线程b,在业务中,常常因为线程之前的业务关系,需要互相影响,甚至是a去中断b,Thread.interrupt()提供了这样一个操作。
例子:
package com.ThreadTest; public class ThreadInterruptedTest { public static void main(String[] args){ System.out.println("程序开始运行"); long time1 = System.currentTimeMillis(); final Thread t1 = new Thread(){ @Override public void run(){ System.out.println("线程t1开始"); try { Thread.sleep(10000); } catch (InterruptedException e) { System.out.println("t1线程被中断!"); //return;//如果这里return,则t1将不再往下执行 e.printStackTrace(); } System.out.println("线程t1结束"); } }; t1.start(); Thread t2 = new Thread(new Runnable() { @Override public void run() { System.out.println("线程t2开始"); try { //模拟t2业务进行 Thread.sleep(3000); //此时t2需要中断t1 t1.interrupt(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程t2结束"); } }); t2.start(); } }
运行结果:
运行结果说明:
t1通过休眠10s模拟t1自身业务耗时,t2通过休眠3s模拟业务耗时,3s后,t2业务结束,调用t1.interrupt()方法来中断t1的业务。在控制台可以看到,t1收到了中断信息,进入到了线程中断的代码并打印出了相关中断信息,但是如果不做return等相关操作,t1在执行完相关操作后仍会向下继续执行代码。所以,每个人应根据自己的业务决定是否让代码继续执行。