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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋昌宏 黑马帝   /  2012-3-8 22:41  /  1800 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

彭卫红 2012-3-8 23:21:55
楼主
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
  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    预期目标是三个线程随机打印任务代码,但是实际结果变成了只打印一次。

4 个回复

倒序浏览
本帖最后由 泮和顺 于 2012-3-8 23: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:05
如果执行完后设置flag=false,那就没必要设置wait和notify啦,本来的意思是一个线程进入后执行完第一次循 ...

interrupt!!hoho
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马