这DISCUS排版有点问题。
/*
当多个线程操作生产,多个线程操作销售时
*/
//商品资源库;
import java.util.concurrent.locks.*;
//locks.*;为什么locks后面还要加上*号啊??
class Resource
{
private boolean flag=false;
//标记是否有商品,如果为false,则无,如果为true,则有;
private String name;
//商品名称;
private int id;
//商品编号;
public void setFlag(boolean flag)
{
this.flag=flag;
}
public boolean getFlag()
{
return flag;
}
public void setGoods(String name)
{
this.name=name;
id++;
System.out.println(Thread.currentThread().getName()+"生产商品:"+this.name+"....商品编号:"+id);
}
public void getGoods()
{
System.out.println(Thread.currentThread().getName()+"销售商品:"+this.name+"........商品编号:"+id);
}
private Lock lock=new ReentrantLock();
private Condition conditionInputs=lock.newCondition();
private Condition conditionOutputs=lock.newCondition();
public void inputs()
{
while(getFlag())
{
lock.lock();
try
{
conditionInputs.await();
setGoods("牙刷");
setFlag(true);
conditionOutputs.signal();
}
catch (InterruptedException ie)
{
}
finally
{
lock.unlock();
}
}
}
public void outputs()
{
while(!getFlag())
//使用while,可以保证线程wait()时,被唤醒后,可以重新再判断flag标记,以防止出现连续两次生产或者连续两次销售的现象发生
{
lock.lock();
try
{
conditionOutputs.await();
getGoods();
setFlag(false);
conditionInputs.signal();
}
catch (InterruptedException ie)
{
}
finally
{
lock.unlock();
}
}
}
}
//生产商品;
class Inputs implements Runnable
{
private Resource res;
//声明一个商品对象;
Inputs(Resource res)
//把商品对象通过构造函数传入到本类对象中;
{
this.res=res;
}
public void run()
//复写Runnable接口总run()方法;
{
while(true)
{
res.inputs();
}
}
}
//销售商品;
class Outputs implements Runnable
{
private Resource res;
//声明一个商品对象;
Outputs(Resource res)
//把商品对象通过构造函数传入到本类对象中;
{
this.res=res;
}
public void run()
//复写Runnable接口总run()方法;
{
while(true)
{
res.outputs();
}
}
}
class InputsOutputsNewDemo
{
public static void main(String[] args)
{
Resource res=new Resource();
Inputs inputs=new Inputs(res);
Outputs outputs=new Outputs(res);
Thread t1=new Thread(inputs);
Thread t2=new Thread(inputs);
Thread t3=new Thread(outputs);
Thread t4=new Thread(outputs);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |