今天学习了一下interrupt的用法 写出来跟大家分享一下 也加深一下自己的印象
第一个类 public class Demo implements Runnable{
private boolean flag=true;
@Override
public synchronized void run() {
while (flag) {
try {
wait();
} catch (InterruptedException e) {
flag=false;
System.out.println("异常结束");
}
System.out.println(Thread.currentThread().getName()+"***********run");
}
}
}
第二个类`public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Demo demo=new Demo();
Thread t1=new Thread(demo);
Thread t2=new Thread(demo);
t1.start();
t2.start();
int num=0;
while (true) {
if (num<=60) {
System.out.println(Thread.currentThread().getName()+"********"+num);
num++;
}else {
t1.interrupt();
t2.interrupt();
break;
}
}
}
}
`
讲解 当我的主线程运行时会发起两个子线程t1 t2,但是这两个线程在运行时会直接进入等待状态,如果我们没有在主线程的代码里加入t1.interrupt();t2.interrupt();,那我当我的主线程输出完以后,子线程并不会结束,当我们加入了interrupt以后,主线程输出完毕以后会将两在等待的t1t2interrupt掉,也就是强制清楚他们的阻塞状态,让他们继续执行,而我们则在run方法中去捕获这个interrupt异常,并修改flag值,让t1 t2 无法再次执行,程序也就结束了 。