黑马程序员技术交流社区

标题: 单纯使用wait方法所抛出的异常与使用了interrupt有什么不同 [打印本页]

作者: pancl    时间: 2014-5-23 11:24
标题: 单纯使用wait方法所抛出的异常与使用了interrupt有什么不同
如题,在某个线程中使用wait方法会抛出interrupt异常。在另一个线程使用interrupt强制清除冻结状态也会产生interrupt异常,这两个线程有什么不同呢?
  1. class StopThread implements Runnable
  2. {
  3.         private boolean flag =true;
  4.         public  void run()
  5.         {
  6.                 while(flag)
  7.                 {
  8.                         try
  9.                         {
  10.                                 wait();
  11.                         }
  12.                         catch ()
  13.                         {
  14.                                 System.out.println(Thread.currentThread().getName()+"....Exception");
  15.                         }
  16.                        
  17.                        
  18.                         System.out.println(Thread.currentThread().getName()+"....run");
  19.                 }
  20.         }
  21.         public void changeFlag()
  22.         {
  23.                 flag = false;
  24.         }
  25. }




  26. class  StopThreadDemo
  27. {
  28.         public static void main(String[] args)
  29.         {
  30.                 StopThread st = new StopThread();
  31.                
  32.                 Thread t1 = new Thread(st);
  33.                 Thread t2 = new Thread(st);


  34.                 t1.setDaemon(true);
  35.                 t2.setDaemon(true);
  36.                 t1.start();
  37.                 t2.start();

  38.                 int num = 0;

  39.                 while(true)
  40.                 {
  41.                         if(num++ == 60)
  42.                         {
  43.                                 //st.changeFlag();
  44.                                 t1.interrupt();
  45.                                
  46.                                 break;
  47.                         }
  48.                         System.out.println(Thread.currentThread().getName()+"......."+num);
  49.                 }
  50.                 System.out.println("over");
  51.         }
  52. }
复制代码




作者: pancl    时间: 2014-5-23 11:28
本帖最后由 pancl 于 2014-5-23 11:32 编辑

更正一下第12行catch括号中的是(interruptedexception)。第一种情况:就是第52不使用interrupt清除10行由于wait产生的冻结状态(也就是52行注释掉)
第二钟情况:如程序中代码那样使用interrupt清除10行由于wait产生的冻结状态
两种情况在第12行捕捉到的异常有什么不同呢?






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2