package cn.java;
public class RunnableDemo4 {
public static void main(String[] args) { Produce p = new Produce(); Productor pr = new Productor(p); Saler s = new Saler(p); Thread th1 = new Thread(pr); Thread th2 = new Thread(s); th1.start(); th2.start(); }} //产品 class Produce{ private int id; private String name; private boolean flag = false;
public Produce() { } public Produce(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; }} //生产者 class Productor implements Runnable{ private Produce p; private int pid=1;
public Productor(Produce p) { this.p = p; } @Override public void run() { //负责生产 while(true){ synchronized (p) { if(p.isFlag()){ //不生产产品 //Thread.sleep(200);//sleep只释放cpu不释放锁 try { p.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ p.setId(pid++); p.setName("小钢炮"); System.out.println("生产:"+p.getName()+p.getId()); p.setFlag(true); p.notify(); } } } }} //销售者
class Saler implements Runnable{ private Produce p;
public Saler(Produce p) { this.p = p; } @Override public void run() { while(true){ synchronized (p) { if(!p.isFlag()){ //没有可销售的产品 try { p.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ System.out.println("卖:"+p.getName()+p.getId()); p.setFlag(false); p.notify();//唤醒一个线程 } } } }}