1. 程式人生 > >生產者消費者問題Java原始碼示例

生產者消費者問題Java原始碼示例

生產者消費者問題

本示例僅供參考,歡迎提出問題,進行交流

import java.util.LinkedList;

class Storage{
    private static final int MAX = 100;
    LinkedList<Object> list = new LinkedList<>();

    public void produce(int num) throws Exception{
        synchronized(list){
            while(list.size() + num > MAX){
                System.out.println("倉庫太小,生產裝不下!!"
); list.wait(); } for(int i=0; i<num; i++) list.add(new Object()); System.out.println("生產了---" + num); list.notifyAll(); } } public void consume(int num) throws Exception{ synchronized(list){ while
(list.size() < num){ System.out.println("倉庫的庫存不夠"); list.wait(); } for(int i=0; i<num; i++) list.remove(); System.out.println("消費了---" + num); list.notifyAll(); } } } class Producer implements Runnable{ private
int num; private Storage storage; public Producer(int num, Storage storage){ this.num = num; this.storage = storage; } public void produce(){ try{ storage.produce(num); }catch(Exception e){ e.printStackTrace(); } } public void run(){ produce(); } } class Consumer implements Runnable{ private int num; private Storage storage; public Consumer(int num, Storage storage){ this.num = num; this.storage = storage; } public void consume(){ try{ storage.consume(num); }catch(Exception e){ e.printStackTrace(); } } public void run(){ consume(); } } public class Pro_Con{ public static void main(String[] args){ Storage st = new Storage(); Producer p1 = new Producer(10, st); Producer p2 = new Producer(80, st); Consumer c1 = new Consumer(40, st); Consumer c2 = new Consumer(70, st); new Thread(c1, "消費者1").start(); new Thread(c2, "消費者2").start(); new Thread(p1, "生產者2").start(); new Thread(p2, "生產者2").start(); } }