Java 多线程-生产者、消费者
生活随笔
收集整理的這篇文章主要介紹了
Java 多线程-生产者、消费者
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、整體代碼
? ? ? ? ThreadDemo.java
?
public class ThreadDemo { public static void main(String[] args) { Godown godown = new Godown(0); Consumer c1 = new Consumer(50, godown); Consumer c2 = new Consumer(20, godown); Consumer c3 = new Consumer(30, godown); Producer p1 = new Producer(10, godown); Producer p2 = new Producer(10, godown); Producer p3 = new Producer(10, godown); Producer p4 = new Producer(10, godown); Producer p5 = new Producer(10, godown); Producer p6 = new Producer(10, godown); Producer p7 = new Producer(80, godown); c1.start(); c2.start(); c3.start(); p1.start(); p2.start(); p3.start(); p4.start(); p5.start(); p6.start(); p7.start(); } } /** * 倉庫 */ class Godown { public static final int max_size = 100; //最大庫存量 public int curnum; //當前庫存量 Godown() { } Godown(int curnum) { this.curnum = curnum; } /** * 生產指定數量的產品 * * @param neednum */ public synchronized void produce(int neednum) { //測試是否需要生產 while (neednum + curnum > max_size) { System.out.println("要生產的產品數量" + neednum + "超過剩余庫存量" + (max_size - curnum) + ",暫時不能執行生產任務!"); try { //當前的生產線程等待 wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //滿足生產條件,則進行生產,這里簡單的更改當前庫存量 curnum += neednum; System.out.println("已經生產了" + neednum + "個產品,現倉儲量為" + curnum); //喚醒在此對象監視器上等待的所有線程 notifyAll(); } /** * 消費指定數量的產品 * * @param neednum */ public synchronized void consume(int neednum) { //測試是否可消費 while (curnum < neednum) { try { //當前的生產線程等待 wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //滿足消費條件,則進行消費,這里簡單的更改當前庫存量 curnum -= neednum; System.out.println("已經消費了" + neednum + "個產品,現倉儲量為" + curnum); //喚醒在此對象監視器上等待的所有線程 notifyAll(); } } /** * 生產者 */ class Producer extends Thread { private int neednum; //生產產品的數量 private Godown godown; //倉庫 Producer(int neednum, Godown godown) { this.neednum = neednum; this.godown = godown; } public void run() { //生產指定數量的產品 godown.produce(neednum); } } /** * 消費者 */ class Consumer extends Thread { private int neednum; //生產產品的數量 private Godown godown; //倉庫 Consumer(int neednum, Godown godown) { this.neednum = neednum; this.godown = godown; } public void run() { //消費指定數量的產品 godown.consume(neednum); } }?
?
二、解釋
? ? ? ??
?
轉載于:https://www.cnblogs.com/james1207/p/3297370.html
總結
以上是生活随笔為你收集整理的Java 多线程-生产者、消费者的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ❤️520要来啦,快去给心仪的她写表白代
- 下一篇: 配置 jvisualvm 监控Java虚