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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闪亮未来 高级黑马   /  2015-4-10 22:55  /  458 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Res
  2. {
  3.         private String name;
  4.         private int count=1;
  5.         private boolean flag;

  6.         public synchronized void set(String name)
  7.         {
  8.                 while (flag)
  9.                         try{this.wait();}catch(Exception e){}
  10.                 this.name=name+"---"+count++;
  11.                 System.out.println(Thread.currentThread().getName()+"生产者。。。。。。。"+this.name);
  12.                 flag=true;
  13.                 this.notifyAll();
  14.                
  15.         }
  16.         public synchronized void out()
  17.         {
  18.                 while (!flag)
  19.                         try{this.wait();}catch(Exception e){}
  20.                 System.out.println(Thread.currentThread().getName()+"消费者"+this.name);
  21.                 flag=false;
  22.                 this.notifyAll();               
  23.         }
  24. }

  25. class Pro implements Runnable
  26. {
  27.         private Res r;

  28.         Pro(Res r)
  29.         {
  30.                 this.r=r;
  31.         }
  32.         public void run()
  33.         {
  34.                 while (true)
  35.                 {
  36.                         r.set("商品");
  37.                 }
  38.         }
  39. }

  40. class Con implements Runnable
  41. {
  42.         private Res r;
  43.         Con(Res r)
  44.         {
  45.                 this.r=r;
  46.         }
  47.         public void run()
  48.         {
  49.                 while (true)
  50.                 {
  51.                         r.out();
  52.                 }
  53.         }
  54. }


  55. class test
  56. {
  57.         public static void main(String[] args)
  58.         {
  59.                 Res r=new Res();
  60.                 Pro p=new Pro(r);
  61.                 Con c=new Con(r);
  62.                 Thread t1=new Thread(p);
  63.                 Thread t2=new Thread(p);
  64.                 Thread t3=new Thread(c);
  65.                 Thread t4=new Thread(c);
  66.                 t1.start();
  67.                 t2.start();
  68.                 t3.start();
  69.                 t4.start();
  70.         }

  71. }
  72. 这是什么问题,运行后电脑会嘟嘟几声,然后出现这样的乱码,这代码没什么问题吧
复制代码

123.jpg (99.94 KB, 下载次数: 3)

123.jpg

1 个回复

正序浏览
同一个Runnable对象建立了2个线程分别执行,而且没有线程安全。。。。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马