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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘东升 中级黑马   /  2012-5-17 12:29  /  910 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//刚看完毕老师的线程通信,消费与生产的问题,我在这里没有添加唤醒,但是线程一样执行,
//而且也没解决先生产后消费,消费完再生产的问题,求教
class Store
{
//定义一个变量,用来给商品编号
private int cout = 0;
Object obj = new Object();
boolean flag = false ;
//生产商品方法
public void product()
{
  while (true)
  {
   synchronized(obj)
   {
    //如果旗标为true,就生产
    if (!flag)
     try{wait();}catch(Exception e){}   
    System.out.println(Thread.currentThread().getName()+"生产"+(++cout));  
    flag = false;
   }
  }
}
//消费方法
public void cust()
{
  while (true)
  {
   synchronized (obj)
   {
    if(flag)
     try{wait();}catch(Exception e){}
    System.out.println(Thread.currentThread().getName()+"消费---————"+cout);
    flag = true;
   }
  }
}
}
//生产类,实现Runnable接口,复写run方法
class Product implements Runnable
{
//创建共用对象的引用
Store s;
Product(Store s)
{
  this.s = s;
}
public void run()
{
  s.product();
}
}
//消费类
class Custumer implements Runnable
{
Store s;
Custumer(Store s)
{
  this.s = s;
}
public void run()
{
  s.cust();
}
}
//创建线程
class  Thread7
{
public static void main(String[] args)
{
  Store s = new Store();
  Product p = new Product(s);
  Custumer c = new Custumer(s);
  Thread t1 = new Thread(p);
  Thread t2 = new Thread(c);
  t1.start();
  t2.start();
  for (int x=0; x<77; x++)
  {
   System.out.println(Thread.currentThread().getName()+"——————————"+x);
  }
}
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马