生產者消費者問題Java原始碼示例
阿新 • • 發佈:2019-02-03
生產者消費者問題
本示例僅供參考,歡迎提出問題,進行交流
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();
}
}