-
角色:生产者,消费者,产品,产品仓库
-
要求:产品仓库 定义最大容量。往产品仓库 添加 或者 删除产品,应该是线程安全的。
-
代码
//产品类 class Prodcut { private String name; }
//产品仓库类 class ProductContainer { private final int MaxContainerSize=100; private ArrayList<Prodcut>prodcutArrayList=new ArrayList<>(); public synchronized void pushProdcut(Prodcut prodcut) { //仓库容量不足时阻塞(wait),有了就不while了 while(prodcutArrayList.size()>=MaxContainerSize){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } prodcutArrayList.add(prodcut); //醒醒 notifyAll(); } public synchronized Prodcut popProdcut() { Prodcut prodcut = null; //仓库存货不足时阻塞(wait),有了就不while了 while( prodcutArrayList.size()<=0){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } prodcut=prodcutArrayList.get(prodcutArrayList.size()-1); prodcutArrayList.remove(prodcutArrayList.size()-1); //醒醒 notifyAll(); return prodcut; } public int getSize(){ return prodcutArrayList.size(); } }
//消费者 class Producer implements Runnable{ ProductContainer productContainer; Producer(ProductContainer _productContainer){ productContainer=_productContainer; } @Override public void run() { while(true){ Prodcut prodcut = new Prodcut(); productContainer.pushProdcut(prodcut); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Total:"+productContainer.getSize()+" 生产者放入了一个产品"); } } }
//生产者 class Consumer implements Runnable { ProductContainer productContainer; Consumer(ProductContainer _productContainer) { productContainer = _productContainer; } @Override public void run() { while (true) { Prodcut prodcut = productContainer.popProdcut(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Total:" + productContainer.getSize() + " 消费者拿走了一个产品"); } } }
//测试类 class Test { public static void main(String []args){ ProductContainer productContainer=new ProductContainer(); for (int i = 1; i <= 10; i++) { new Thread(new Producer(productContainer)).start(); } for (int i = 1; i <= 10; i++) { new Thread(new Consumer(productContainer)).start(); } } }
Java学习-Java模拟生产者/消费者模型
最新推荐文章于 2023-02-02 22:01:13 发布