A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈虹旭 中级黑马   /  2012-10-16 14:44  /  1098 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class StopThread implements Runnable
  2. {
  3. private boolean flag = true;
  4. public synchronized void run()
  5. {
  6. while(flag)
  7. {
  8. try
  9. {
  10. wait();//<FONT color=red>我就是想知道这里wait了不就抛出异常了吗,下面直接在函数中解决异常,解决的时候是一条输出语句,但是为什么在编译运行后却看不到catch块中的打印语句呢?</FONT>
  11. }
  12. catch (InterruptedException e)
  13. {
  14. System.out.println(Thread.currentThread().getName()+"......Exception");
  15. }
  16. System.out.println(Thread.currentThread().getName()+"......run");
  17. }

  18. }
  19. public void changeFlag()
  20. {
  21. flag = false;
  22. }
  23. }

  24. class StopThreadDemo
  25. {
  26. public static void main(String[] args)
  27. {
  28. StopThread st = new StopThread();

  29. Thread t1 = new Thread(st);
  30. Thread t2 = new Thread(st);

  31. t1.start();
  32. t2.start();

  33. int num = 0;
  34. while(true)
  35. {
  36. if(num++ == 60)
  37. {
  38. st.changeFlag();
  39. break;
  40. }
  41. System.out.println(Thread.currentThread().getName()+"......."+num);
  42. }
  43. System.out.println("Over");


  44. }
  45. }
复制代码
求解释!

评分

参与人数 1黑马币 +12 收起 理由
韩军博 + 12 神马都是浮云

查看全部评分

1 个回复

倒序浏览
ssshyu 发表于 2012-10-16 16:03
关于解决wait()抛出异常这个问题中,
Thread t1 = new Thread(st);

不是吧?这两句话的含义不就是定义两个线程t1、t2接收Runnable接口子类的初始化对象吗,为了对子类中的run()方法进行线程的访问操作...
我是不理解像wait()和sleep()这样处于冻结状态的方法,在api文档中写的都会抛出异常,以前老师写的catch块都不会进行处理,这次的是有处理语句了,为什么运行结果中就是没有处理代码的打印呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马