//刚看完毕老师的线程通信,消费与生产的问题,我在这里没有添加唤醒,但是线程一样执行,
//而且也没解决先生产后消费,消费完再生产的问题,求教
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);
}
}
}
|
|