生产者生产产品放到一个区域中,之后消费者从此区域里取出产品
这里的区域指的是:共享资源
public class Goods { private String pinpai; private String name; /** * true:有商品 * false:无商品 */ private boolean flag = false; public String getPinpai() { return pinpai; } public void setPinpai(String pinpai) { this.pinpai = pinpai; } public String getName() { return name; } public void setName(String name) { this.name = name; } public synchronized void get(){ if(!flag){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("消费者取走了"+this.getPinpai()+"---------"+this.getName()); this.flag = false; notifyAll(); } public synchronized void set(String pinpai,String name){ if(flag){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.setPinpai(pinpai); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } this.setName(name); System.out.println("生产者生产了"+this.getPinpai()+"---------"+this.getName()); this.flag = true; notifyAll(); } }
public class XiaoFei implements Runnable{ private Goods goods; public XiaoFei(Goods goods) { this.goods = goods; } @Override public void run() { for(int i=0;i<10;i++){ goods.get(); } } }
public class ShengChan implements Runnable{ private Goods goods; public ShengChan(Goods goods) { this.goods = goods; } @Override public void run() { for(int i=0;i<10;i++){ if (i%2==0){ goods.set("哇哈哈","矿泉水"); }else{ goods.set("旺仔","小馒头"); } } } }
public class Test { public static void main(String[] args) { Goods goods = new Goods(); ShengChan shengChan = new ShengChan(goods); XiaoFei xiaoFei = new XiaoFei(goods); Thread t1 = new Thread(shengChan); Thread t2 = new Thread(xiaoFei); t1.start(); t2.start(); } }
JUC----java.util .concurrent工具包的简称。
是一个处理线程的工具包,JDK 1.5开始出现的。
public class Goods { private String pinpai; private String name; public String getPinpai() { return pinpai; } public void setPinpai(String pinpai) { this.pinpai = pinpai; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
public class ShengChan implements Runnable{ private BlockingQueue<Goods> blockingQueue; public ShengChan(BlockingQueue blockingQueue) { this.blockingQueue = blockingQueue; } @Override public void run() { for(int i=0;i<10;i++){ Goods goods = new Goods(); if(i%2==0){ goods.setPinpai("旺仔"); goods.setName("小馒头"); }else { goods.setPinpai("哇哈哈"); goods.setName("矿泉水"); } try { System.out.println("生产者========"+goods.getPinpai()+goods.getName()); blockingQueue.put(goods); } catch (InterruptedException e) { e.printStackTrace(); } } } }
public class XiaoFei implements Runnable{ private BlockingQueue<Goods> blockingQueue; public XiaoFei(BlockingQueue blockingQueue) { this.blockingQueue = blockingQueue; } @Override public void run() { for(int i=0;i<10;i++){ try { Goods goods = blockingQueue.take(); System.out.println("消费者消费========"+goods.getPinpai()+goods.getName()); } catch (InterruptedException e) { e.printStackTrace(); } } } }
public class Test { public static void main(String[] args) { BlockingQueue<Goods> blockingQueue = new ArrayBlockingQueue<Goods>(5); ShengChan shengChan = new ShengChan(blockingQueue); XiaoFei xiaoFei = new XiaoFei(blockingQueue); Thread t1 = new Thread(shengChan); Thread t2 = new Thread(xiaoFei); t1.start(); t2.start(); } }