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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fenzheng 中级黑马   /  2014-6-2 23:04  /  1245 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package jichu;

  2. class Res{
  3.         String name ;
  4.         String sex ;
  5.         boolean flag=false;
  6. }
  7. class Input implements Runnable{
  8.         private Res r;
  9.         Input(Res r){
  10.                 this.r=r;
  11.         }
  12.         public void run(){
  13.                 int x=0;
  14.                 while (true)
  15.                 {
  16.                         synchronized (r) {
  17.                                 if (r.flag) {try {r.wait();} catch (Exception e) {}
  18.                                 if (x==0) {r.name="mike";r.sex="man";}       
  19.                                 else {
  20.                                         r.name="lili";
  21.                                         r.sex="women";
  22.                                 }
  23.                                 x=(x+1)%2;
  24.                                 r.flag=true;
  25.                                 r.notify();
  26.                                 }
  27.                         }
  28.                 }
  29.         }
  30.        
  31. }
  32. class Output implements Runnable{
  33.         private Res r;
  34.         Output(Res r)
  35.         {
  36.                 this.r=r;
  37.         }
  38.         public void run(){
  39.                 while (true){
  40.                         synchronized (r) {if(!r.flag)//判断标记
  41.                                 try {r.wait();
  42.                                
  43.                         } catch (Exception e) {
  44.                                 }
  45.                                 System.out.println(r.name+"......."+r.sex);
  46.                                 r.flag=false;
  47.                                 r.notify();
  48.                         }
  49.                         }
  50.                 }
  51.         }
  52. public class InPutOutPutDemo {
  53.         public static void main (String [] args){
  54.                 Res r= new Res ();
  55.                 System.out.println("开始了");
  56.                 Input in=new Input (r);
  57.                 System.out.println("输入线程建立");
  58.                 Output out=new Output(r);
  59.                 System.out.println("输出线程建立");
  60.                 Thread t1=new Thread(in);
  61.                 Thread t2=new Thread (out);
  62.                 t1.start();
  63.                 System.out.println("开启线程1");
  64.                 t2.start();
  65.                 System.out.println("开启线程2");
  66.         }

  67. }
复制代码
运行结果如图片所示,明明程序都走了一遍为什么不出我想要的结果?什么原因啊?错哪里了?

搜狗截图20140602230024.png (32.55 KB, 下载次数: 3)

搜狗截图20140602230024.png

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

6 个回复

倒序浏览
还没学到,不懂。
回复 使用道具 举报
把Input类中的run方法的代码改成这样
  1. public void run() {
  2.                 int x = 0;
  3.                 while (true) {
  4.                         synchronized (r) {
  5.                                 if (r.flag) {
  6.                                         try {
  7.                                                 r.wait();
  8.                                         } catch (Exception e) {
  9.                                         }}
  10.                                         if (x == 0) {
  11.                                                 r.name = "mike";
  12.                                                 r.sex = "man";
  13.                                         } else {
  14.                                                 r.name = "lili";
  15.                                                 r.sex = "women";
  16.                                         }
  17.                                         x = (x + 1) % 2;
  18.                                         r.flag = true;
  19.                                         r.notify();
  20.                                
  21.                         }
  22.                 }
  23.         }
复制代码
判断标记的if语句是独立的,和对资源赋值的语句没有关系,

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 赞一个!

查看全部评分

回复 使用道具 举报
呵呵,是的,修改了好了,太谢谢了!!
回复 使用道具 举报
月光海 发表于 2014-6-2 23:18
把Input类中的run方法的代码改成这样判断标记的if语句是独立的,和对资源赋值的语句没有关系, ...

是的,刚才按你说的,修改好了,太谢谢你了!
回复 使用道具 举报
还没学到.............膜拜
回复 使用道具 举报
月光海 发表于 2014-6-2 23:18
把Input类中的run方法的代码改成这样判断标记的if语句是独立的,和对资源赋值的语句没有关系, ...

学到了,原来这样
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马