黑马程序员技术交流社区

标题: 线程间通信遗留问题 [打印本页]

作者: 张玉建    时间: 2013-7-30 18:06
标题: 线程间通信遗留问题
本帖最后由 杨兴庭 于 2013-7-30 23:09 编辑

线程问题!这个代码,编译时没有问题,为什么在运行时什么都没有?求解释
class resource
{
private String name;
private boolean flag=false;
private int counnt=1;
public synchronized  void set(String name)
{
  
  while (flag)
  {
   try
   {
    this.wait();
   }
   catch (Exception e)
   {
    throw new RuntimeException("线程等待");
   }
   this.name= name+"...."+counnt++;
   System.out.println(Thread.currentThread().getName()+".生产.."+this.name);
   flag= true;
   this.notifyAll();
  }
}
public synchronized void get()
{
  System.out.println("hhhh");
  while(!flag)
  {
   try
   {
    this.wait();
   }
   catch (Exception e)
   {
    throw new RuntimeException("线程等待");
   }

   System.out.println(Thread.currentThread().getName()+".消费者.."+this.name);
   flag= false;
   this.notifyAll();
  }

}
}
class producer implements Runnable
{
private resource res;
producer(resource res)
{
  this.res= res;
}
public void run()
{
  while (true)
  {
   res.set("商品");
  }
}
}
class consumer implements Runnable
{
private resource res;
consumer(resource res)
{
  this.res= res;
}
public void run()
{
  while (true)
  {
   res.get();
  }
}
}
class  communication
{
public static void main(String[] args)
{
  resource r= new resource();
  producer pro = new producer(r);
  consumer con= new consumer(r);

  Thread t1=new Thread(pro);
  
  Thread t2=new Thread(con);
  //Thread t3=new Thread(pro);
  //Thread t4=new Thread(con);
  t1.start();
  t2.start();
  
  //t3.start();
  //t4.start();
}
}



作者: 哪颗最亮的星星    时间: 2013-7-30 21:11
this.name=name+"...."+counnt++;
System.out.println(Thread.currentThread().getName()+".生产.."+this.name);
flag=true;
this.notifyAll();

把这些代码放到循环外边,另一个也是一样,我这里就不复制了
作者: 张玉建    时间: 2013-7-30 22:22
谢谢!没注意到




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2