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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. /*
  2. 生产者消费者的线程同步问题
  3. */
  4. class Res
  5. {
  6.         private String name;
  7.         private int count=1;
  8.         private boolean flag=false;
  9.         public synchronized void set(String name)
  10.         {
  11.                 if(flag)
  12.                         try{wait();}catch(Exception e){}
  13.                 this.name=name+"----"+count++;
  14.                 System.out.println(Thread.currentThread().getName()+"-------生产者--"+this.name);
  15.                 flag=true;
  16.                 notify();

  17.         }
  18.         public synchronized void out()
  19.         {
  20.                 if(!flag)
  21.                         try{wait();}catch(Exception e){}
  22.                 System.out.println(Thread.currentThread().getName()+"--------消费者------"+this.name);
  23.                 flag=false;
  24.                 notify();
  25.         }
  26. }
  27. class Pro implements Runnable
  28. {
  29.         private Res r;
  30.         Pro(Res r)
  31.         {
  32.                 this.r=r;
  33.         }
  34.         public void run()
  35.         {
  36.                 while(true)
  37.                 {
  38.                         r.set("冰激凌");
  39.                 }
  40.         }
  41.        
  42. }
  43. class Con implements Runnable
  44. {
  45.         private Res r;
  46.         Con(Res r)
  47.         {
  48.                 this.r=r;
  49.         }
  50.         public void run()
  51.         {                       
  52.                 while (true)
  53.                 {
  54.                         r.out();
  55.                 }
  56.        
  57.         }
  58. }

  59. class ProConDemo
  60. {
  61.         public static void main(String[] args)
  62.         {
  63.                 Res r=new Res();
  64.                 new Thread(new Pro(r)).start();
  65.                 new Thread(new Con(r)).start();
  66.         }
  67. }
复制代码





无标题.png (66.44 KB, 下载次数: 7)

无标题.png

9 个回复

倒序浏览
似乎是越界了?
回复 使用道具 举报
你输入以下javac,看看输出的正确吗?要是出不来,只能说你JDk装的不兼容吧
回复 使用道具 举报
g552092947 发表于 2015-7-31 13:43
你输入以下javac,看看输出的正确吗?要是出不来,只能说你JDk装的不兼容吧 ...

我输的就是javac啊,编译过程中变成了这样的。
回复 使用道具 举报
yefeidd 发表于 2015-7-31 12:59
似乎是越界了?

什么越界了,代码有问题吗?
回复 使用道具 举报
命令提示的是什么鬼啊,不会是编码出错了吧
回复 使用道具 举报
JustForYou 发表于 2015-7-31 16:53
命令提示的是什么鬼啊,不会是编码出错了吧

你拿过去运行下,看是什么结果。
回复 使用道具 举报
好像类名中间不能出现Con, 我改了一下,你试一试
  1. class Res
  2. {
  3.         private String name;
  4.         private int count=1;
  5.         private boolean flag=false;
  6.         public synchronized void set(String name)
  7.         {
  8.                 if(flag)
  9.                         try{wait();}catch(Exception e){}
  10.                 this.name=name+"----"+count++;
  11.                 System.out.println(Thread.currentThread().getName()+"-------生产者--"+this.name);
  12.                 flag=true;
  13.                 notify();

  14.         }
  15.         public synchronized void out()
  16.         {
  17.                 if(!flag)
  18.                         try{wait();}catch(Exception e){}
  19.                 System.out.println(Thread.currentThread().getName()+"--------消费者------"+this.name);
  20.                 flag=false;
  21.                 notify();
  22.         }
  23. }
  24. class Pro implements Runnable
  25. {
  26.         private Res r;
  27.         Pro(Res r)
  28.         {
  29.                 this.r=r;
  30.         }
  31.         public void run()
  32.         {
  33.                 while(true)
  34.                 {
  35.                         r.set("冰激凌");
  36.                 }
  37.         }
  38.         
  39. }
  40. class Con2 implements Runnable
  41. {
  42.         private Res r;
  43.         Con2(Res r)
  44.         {
  45.                 this.r=r;
  46.         }
  47.         public void run()
  48.         {                        
  49.                 while (true)
  50.                 {
  51.                         r.out();
  52.                 }
  53.         
  54.         }
  55. }

  56. public class Test
  57. {
  58.         public static void main(String[] args)
  59.         {
  60.                 Res r=new Res();
  61.                 new Thread(new Pro(r)).start();
  62.                 new Thread(new Con2(r)).start();
  63.         }
  64. }
复制代码
回复 使用道具 举报 1 0
fengjietian 发表于 2015-7-31 20:27
好像类名中间不能出现Con, 我改了一下,你试一试

果然是高手,但是为什么不能出现Con,你是怎么发现的?
回复 使用道具 举报
你根据编译器报错信息,搜索一下, 我用的是eclipse, 有报错信息。
解决了你支持一下我的答案啊
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马