InterruptedException+interrupt停止线程的疑惑

来源:互联网 发布:网络恐怖主义的成因 编辑:程序博客网 时间:2024/06/05 17:10

问题:利用interrupt+捕捉异常的方式来停止异常,依靠什么判断?以及sleep方法

Thread.interrupted()//是这个方法?这个方法怎么理解?

还是根据控制台出现的InterruptedException这个来判断线程已经停止?

ps:总感觉interrupt+捕捉异常的方式来停止异常不像是真正的停止线程,这样看来倒不如stop来得好,但是stop缺陷就更明显了,会解锁的。

所以停止线程的方法到底是什么?


package Demo1;import java.util.Map;public class Run1 {/** * @param args */public static void main(String[] args) {Thread thread = new Thread("线程1"){ @Overridepublic void run() {// TODO Auto-generated method stubsuper.run();try {Thread.sleep(1000);} catch (InterruptedException e) {System.out.println(Thread.currentThread().getName()+":"+this.isInterrupted());e.printStackTrace();}}};thread.start();thread.interrupt();System.out.println(thread.getName()+":"+Thread.interrupted());Thread thread2 = new Thread("线程2"){@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();try {Thread.sleep(1000);} catch (InterruptedException e) {System.out.println(Thread.currentThread().getName()+":"+this.isInterrupted());e.printStackTrace();}}};thread2.start();thread2.interrupt();System.out.println(thread2.getName()+":"+Thread.interrupted());Thread thread3 = new Thread("线程3"){public void run() {for (int i = 0; i < 3; i++) {System.out.println("i="+i);}};};thread3.start();thread3.interrupt();System.out.println(thread3.getName()+":"+thread3.isInterrupted());Map<Thread, StackTraceElement[]> maps = Thread.getAllStackTraces();System.out.println("线程数量:"+maps.size());//打印每个线程的信息for (Thread in : maps.keySet()){System.out.println("===="+in.getId()+":"+in.getName()+":"+in.isInterrupted());}}}


0 0
原创粉丝点击