//零件类
class LingJian
{
private int num=1;
private String name="车轮";
/*
* falg=true;表示机器正在生产零件,否则表示工人正在取零件
*/
private boolean flag=true;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public synchronized void set(int num,String name)
{
if(!flag)
{
try {
//工人在取零件,机器暂停工作
wait();
System.out.println("工人正在取零件,等会在生产");
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//机器生产零件
this.setNum(num);
this.setName(name);
//修改标志位,使工人开始工作
flag=false;
//唤醒等待的线程
notify();
}
public synchronized void get()
{
if(flag)
{
try {
//flag=true;机器正在生产零件,工人先休息会
System.out.println("机器正在生产零件,请稍等");
wait();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//工人取零件,机器休息
System.out.println("零件号: "+this.getNum()+"--->零件名称: "+this.getName());
//修改标志位,使机器开始工作
flag=true;
//唤醒等待的线程
notify();
}
}
//生产零件
class Produce implements Runnable//机器
{
private LingJian lj=null;
public Produce(LingJian lj)
{
this.lj=lj;
}
public void run()
{
int i=0;
while(true)
{
if(i==0)
{
lj.set(1,"车轮");
i=1;
}
if(i==1)
{
lj.set(2,"车轴");
i=0;
}
}
}
}
//工人取零件
class Consume implements Runnable//工人
{
private LingJian lj=null;
public Consume(LingJian lj)
{
this.lj=lj;
}
public void run()
{
while(true)
{
lj.get();
}
}
}
//测试类
public class LingJianDemo {
public static void main(String args[])
{
//构建一个零件实例对象
LingJian lj=new LingJian();
Produce pro=new Produce(lj);
Consume cse=new Consume(lj);
new Thread(cse).start();
new Thread(pro).start();
}
}