黑马程序员技术交流社区

标题: 多线程停止问题 [打印本页]

作者: DOOR    时间: 2013-12-31 23:09
标题: 多线程停止问题
本帖最后由 DOOR 于 2014-1-4 18:03 编辑
  1. class StopThread implements Runnable//1
  2. {
  3.         private boolean flag = true;
  4.         public void run()//2
  5.         {
  6.                 while(flag)//3
  7.                 {
  8.                         try
  9.                         {
  10.                                 wait();
  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()//6
  20.         {
  21.                 flag=false;
  22.         }
  23. }
  24. class  StopThreadDemo
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 StopThread st = new StopThread();//4
  29.                 Thread t1 = new Thread(st);
  30.                 Thread t2 = new Thread(st);
  31.                 t1.start();
  32.                 t2.start();

  33.                 int num = 0;//5
  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.         }
  44. }
复制代码
为什么我写的这个特殊情况线程没有挂起来,求解

作者: 776699    时间: 2014-1-1 01:15
本帖最后由 776699 于 2014-1-1 01:18 编辑

在t1,t2,main线程运行时,当t1,t2,线程抢到执行权时,t1,t2,等待挂起,main主线程执行,完以后,t1,t2 并没有被唤醒,所以  st.changeFlag();不会被执行!!处于等状态。
解决方案:可以用interrupt() 让处于冻结的状态运行,t1.interrupt();t2,interrupt().
这样就可以中断线程。

因为你这个是多线程,你这个run方法里最好,加一个synchronized ,防止监控器 异常错误。





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