首页 > 代码库 > java多线程 生产者消费者模式
java多线程 生产者消费者模式
package de.bvb; /** * 生产者消费者模式 * 通过 wait() 和 notify() 通信方法实现 * */ public class Test1 { public static void main(String[] args) { Godown godown = new Godown(50); for (int i = 0; i < 5; i++) { new ProducerThread(i * 10, godown).start(); new ConsumerThread(i * 10, godown).start(); } } } /** 仓库 */ class Godown { public static final int max_size = 100; // 最大库存量 public int currentSize; // 当前库存 public Godown(int currentSize) { this.currentSize = currentSize; } // 生产指定数量的产品 public synchronized void produce(int size) { try { while (currentSize + size > max_size) { // 不满足生产的条件 System.out.println("要生产的产品数量" + size + "超过剩余库容量" + (max_size - currentSize) + ",暂时不能执行生产任务!"); // 当前的生产线程等待 wait(); } // 满足生产条件,则进行生产,这里简单的更改当前库存量 currentSize += size; System.out.println("生产前仓储量为:" + (currentSize - size) + ";生产了" + size + "个产品,现仓储量为" + currentSize); // 唤醒在此对象监视器上等待的所有线程 notifyAll(); } catch (Exception e) { e.printStackTrace(); } } // 消费指定数量的产品 public synchronized void consume(int size) { try { while (currentSize < size) { // 不满足消费的条件 System.out.println("要消费的产品数量" + size + "超过剩余库存量" + (currentSize) + ",暂时不能执行消费任务!"); // 当前的生产线程等待 wait(); } // 满足生产条件,则进行生产,这里简单的更改当前库存量 currentSize -= size; System.out.println("消费前的仓储量为" + (currentSize + size) + ";已经消费了" + size + "个产品,现仓储量为" + currentSize); // 唤醒在此对象监视器上等待的所有线程 notifyAll(); } catch (Exception e) { e.printStackTrace(); } } } /** 生产者线程 */ class ProducerThread extends Thread { private int size; private Godown godown; public ProducerThread(int size, Godown godown) { super(); this.size = size; this.godown = godown; } @Override public void run() { godown.produce(size); } } class ConsumerThread extends Thread { private int size; private Godown godown; public ConsumerThread(int size, Godown godown) { super(); this.size = size; this.godown = godown; } @Override public void run() { godown.consume(size); } }
java多线程 生产者消费者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。