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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么该程序输出的值不是间隔着输出一个人名字、性别和另一个人的名字和性别?总是有重复的。
package zhangli1;
public class ResourceDemo {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
       Resource r=new Resource();
       Input in=new Input(r);
       Output out=new Output(r);
       Thread t1=new Thread(in);
       Thread t2=new Thread(out);
       t1.start();
       t2.start();
}
}
class Resource{
String name;
String sex;
static boolean flag=false;
public synchronized void set(String name,String sex){
  if(flag)
   try {
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  this.name=name;
  this.sex=sex;
  flag=true;
  this.notify();
}
public synchronized void out(String name,String sex){
  if(!flag)
   try {
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  System.out.println(name+".........."+sex);
  flag=false;
  this.notify();
}
}
  class Input implements Runnable{
   Resource r;
   Input(Resource r)
   {
    this.r=r;
   }
   public void run(){
   int x=0;
   while(true)
   {
    if(x==0)
    {
     r.set("美丽", "女女女女女女女女");
    }
    else
     r.set("JOHN","NAN");
    x=(x+1)%2;
   
    }
   
   }
  }
  class Output implements Runnable{
   Resource r;
   Output(Resource r){
    this.r=r;
   }
   public void run(){
   
   while(true){
   
    r.out(r.name, r.sex);
   
   }
   }
  }
输出结果是这样的:
JOHN..........NAN
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
美丽..........女女女女女女女女
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女
美丽..........女女女女女女女女
美丽..........女女女女女女女女
JOHN..........NAN
美丽..........女女女女女女女女

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
  1. class Res
  2. {
  3.         private String name;
  4.         private String sex;
  5.         private boolean flag = false;

  6.         public synchronized void set(String name,String sex)
  7.         {
  8.                 if(flag)
  9.                         try{this.wait();}catch(Exception e){}
  10.                 this.name = name;
  11.                
  12.                 this.sex = sex;
  13.                 flag = true;
  14.                 this.notify();
  15.         }
  16.         public synchronized void out()
  17.         {
  18.                 if(!flag)
  19.                         try{this.wait();}catch(Exception e){}
  20.                 System.out.println(name+"........"+sex);
  21.                 flag = false;
  22.                 this.notify();
  23.         }
  24. }

  25. class Input implements Runnable
  26. {
  27.         private Res r ;
  28.         Input(Res r)
  29.         {
  30.                 this.r = r;
  31.         }
  32.         public void run()
  33.         {
  34.                 int x = 0;
  35.                 while(true)
  36.                 {
  37.                         if(x==0)                               
  38.                                 r.set("mike","man");                               
  39.                         else       
  40.                                 r.set("丽丽","女女女女女");                               
  41.                         x = (x+1)%2;
  42.                 }
  43.         }
  44. }

  45. class Output implements Runnable
  46. {
  47.         private Res r ;
  48.        
  49.         Output(Res r)
  50.         {
  51.                 this.r = r;
  52.         }
  53.         public void run()
  54.         {
  55.                 while(true)
  56.                 {
  57.                         r.out();
  58.                 }
  59.         }
  60. }


  61. class  InputOutputDemo2
  62. {
  63.         public static void main(String[] args)
  64.         {
  65.                 Res r = new Res();

  66.                 new Thread(new Input(r)).start();
  67.                 new Thread(new Output(r)).start();
  68.                 /*
  69.                 Input in = new Input(r);
  70.                 Output out = new Output(r);

  71.                 Thread t1 = new Thread(in);
  72.                 Thread t2 = new Thread(out);

  73.                 t1.start();
  74.                 t2.start();
  75.                 */
  76.         }
  77. }
复制代码
对照这个看看吧

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 叶征东 于 2012-10-7 12:06 编辑

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