黑马程序员技术交流社区

标题: wait的使用 求解 [打印本页]

作者: 蒋昌宏    时间: 2012-3-8 22:41
标题: wait的使用 求解
  1. public class WaitDemo {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 functionDemo f = new functionDemo();
  8.                 Thread t1 = new Thread(f);
  9.                 Thread t2 = new Thread(f);
  10.                 Thread t3 = new Thread(f);

  11.                 t1.start();
  12.                 t2.start();
  13.                 t3.start();
  14.         }

  15. }

  16. class functionDemo implements Runnable {
  17.         int count = 0;
  18.         boolean flag;

  19.         public void run() {

  20.                 this.show();

  21.         }

  22.         private void show() {
  23.                         while (count < 100) {
  24.                         synchronized(this){
  25.                         if (flag)
  26.                                 try {wait();} catch (InterruptedException e) {}
  27.                         {
  28.                         for (int i = -999999999; i < 999999999; i++) {
  29.                         }
  30.                         System.out.println(Thread.currentThread().getName() + "...wait..."+count);
  31.                         count++;
  32.                         }
  33.                         flag = true;
  34.                         notifyAll();
  35.                         }
  36.                         }
  37.         }
  38. }
复制代码
wait后notifyAll    预期目标是三个线程随机打印任务代码,但是实际结果变成了只打印一次。
作者: 泮和顺    时间: 2012-3-8 23:01
本帖最后由 泮和顺 于 2012-3-8 23:05 编辑

看起来简单还不简单我的天。。。
作者: 彭卫红    时间: 2012-3-8 23:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: 蒋昌宏    时间: 2012-3-9 00:05
彭卫红 发表于 2012-3-8 23:21
boolean默认值是false,只有flag是false时才执行打印的语句,当flag是true,线程进入等待wait(),等待notify ...

如果执行完后设置flag=false,那就没必要设置wait和notify啦,本来的意思是一个线程进入后执行完第一次循环把flag设置为true,然后第二次进入循环的线程就进入wait状态,又因为wait释放了锁,所以这时第三个线程可以进锁继续执行....                  额~~我了然了   从第2个进入锁的线程开始 全都wait了
作者: 蒋昌宏    时间: 2012-3-9 00:06
蒋昌宏 发表于 2012-3-9 00:05
如果执行完后设置flag=false,那就没必要设置wait和notify啦,本来的意思是一个线程进入后执行完第一次循 ...

interrupt!!hoho




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