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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ぺsimon☆ 于 2013-5-16 23:03 编辑
  1. /*
  2. 生产者消费者的例子,生产一个就消费一个

  3. 对同一堆资源进行操作
  4. 生产的时候要定义多线程代码,而消费的时候又是多线程代码
  5. 但是生产和消费的代码又不一样,所以要定义两个run方法

  6. 问题:不知道为什么程序运行之后控制台上面是乱码,为什么呢?哥们想了半天不知道怎么回事啊兄弟...
  7. */

  8. class Res
  9. {
  10.         String name;
  11.         String sex;
  12.         boolean flag=false;
  13. }

  14. class Por implements Runnable
  15. {
  16.         private Res r;

  17.         Por(Res r)
  18.         {
  19.     this.r=r;
  20.         }
  21.         
  22.         public void run()
  23.         {
  24.   int x=0;
  25.   while(true)
  26.          {
  27.            
  28.            synchronized(r)
  29.            {

  30.             if(r.flag)
  31.               try{r.wait();}catch(Exception e){}

  32.                 if(x==0)
  33.                 {
  34.                    r.name="mike";
  35.                    r.sex="man";
  36.                 }

  37.                 else
  38.                 {
  39.                    r.name="lili";
  40.                    r.sex="gril";
  41.                 }
  42.                 x=(x+1)%2;
  43.                
  44.                 r.flag=true;
  45.                 r.notify();
  46.             
  47.              }
  48.            }
  49.         }
  50. }

  51. class Con implements Runnable
  52. {
  53.         private Res r;
  54.         Con(Res r)
  55.         {
  56.                 this.r=r;
  57.         }
  58.         
  59.         public void run()
  60.         {
  61.                 while(true)
  62.                 {
  63.                         synchronized(r)
  64.                         {
  65.                                 if(!r.flag)
  66.                                    try{r.wait();}catch(Exception e){}
  67.                                 System.out.println(r.name+"..."+r.sex);
  68.                                 r.flag=false;
  69.                                 r.notify();
  70.                         }
  71.                 }
  72.         }
  73.         
  74. }

  75. class ProConDemo2
  76. {
  77.         public static void main(String[] args)
  78.         {
  79.                 Res r=new Res();
  80.                 Por p=new Por(r);
  81.                 Con c=new Con(r);

  82.                 Thread t1=new Thread(p);
  83.                 t1.start();
  84.         
  85.                 Thread t2=new Thread(c);
  86.                 t2.start();
  87.         }
  88. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

4 个回复

倒序浏览
围观`~~~~~~
回复 使用道具 举报
在eclipse里面发现有错误A class file was not written. The project may be inconsistent, if so try refreshing this project and building it

把Con这个类名字改一下可以了 不知道咋回事
回复 使用道具 举报
本帖最后由 ZhaoYuBetter 于 2013-5-16 15:58 编辑

Con 类的问题
下面是其他的一些保留字,在Windows下面都不能创建。注重,不许分大小写。Con,con,CON 都不可以!

con是操作系统保留的一个设备名字,还有很多设备名都不能拿来用,如下:

The following reserved device names cannot be used as the name of a file: CON, PRN, AUX, CLOCK$, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. Also avoid these names followed by an extension (for example, NUL.tx7).

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

回复 使用道具 举报
ZhaoYuBetter 发表于 2013-5-16 15:49
Con 类的问题
下面是其他的一些保留字,在Windows下面都不能创建。注重,不许分大小写。Con,con,CON 都不可 ...

原来是这样呵呵,我还想了半天不明白,谢谢啦哥们
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马