Java学习笔记—生产者和消费者模式
生活随笔
收集整理的這篇文章主要介紹了
Java学习笔记—生产者和消费者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、生產者和消費者問題
生產者消費者模式是一個十分經典的多線程協作的模式。 生產者和消費者問題包含了兩類線程:一類是生產者線程用于生產數據, 一類是消費者數據用于消費數據。 /*生產者消費者案例 包含一個奶箱類,一個生產者類,一個消費者類和一個測試類。 */ //定義奶箱類 public class Box {//定義成員變量牛奶private int milk;//定義成員變量表示奶箱的狀態private static boolean state = false;//存儲牛奶的操作public synchronized void storeMilk(int milk) {//如果有牛奶,等待消費if (state) {//這里注意要進行異常處理try {wait();} catch (InterruptedException e) {//打印異常信息到控制臺e.printStackTrace();}}//如果沒有牛奶就生產牛奶this.milk = milk;System.out.println("生產者將第" + this.milk + "瓶奶放入奶箱中");//生產完畢,修改奶箱狀態state = true;notify();}public synchronized void get() {//如果沒有牛奶,等待生產if (!state) {//異常處理try{wait();} catch (InterruptedException e) {e.printStackTrace();}}//如果有,就獲取牛奶System.out.println("消費者拿到第" + this.milk + "瓶奶" );//消費完畢之后修改奶箱狀態state = false;notify();} }public class Producer implements Runnable {private Box b;//構造方法,將奶箱對象作為參數public Producer(Box b) {this.b = b;}@Overridepublic void run() {for (int i = 1; i <= 10; i++) {//調用存儲牛奶的方法b.storeMilk(i);}} }public class Customer implements Runnable {private Box b;//構造方法,將奶箱對象作為參數public Customer(Box b) {this.b = b;}@Overridepublic void run() {while(true) {//調用獲取牛奶的方法b.get();}} } public static void main(String[] args) {//創建奶箱對象Box box = new Box();//創建生產者和消費者對象,并將奶箱對象作為構造方法參數傳入Producer producer = new Producer(box);Customer customer = new Customer(box);//創建線程Thread t1 = new Thread(producer, "生產者");Thread t2 = new Thread(customer, "消費者");//啟動線程t1.start();t2.start();} 運行結果如下: 生產者將第1瓶奶放入奶箱中 消費者拿到第1瓶奶 生產者將第2瓶奶放入奶箱中 消費者拿到第2瓶奶 生產者將第3瓶奶放入奶箱中 消費者拿到第3瓶奶 生產者將第4瓶奶放入奶箱中 消費者拿到第4瓶奶 生產者將第5瓶奶放入奶箱中 消費者拿到第5瓶奶 生產者將第6瓶奶放入奶箱中 消費者拿到第6瓶奶 生產者將第7瓶奶放入奶箱中 消費者拿到第7瓶奶 生產者將第8瓶奶放入奶箱中 消費者拿到第8瓶奶 生產者將第9瓶奶放入奶箱中 消費者拿到第9瓶奶 生產者將第10瓶奶放入奶箱中 消費者拿到第10瓶奶總結
以上是生活随笔為你收集整理的Java学习笔记—生产者和消费者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金赎回怎么算收益?赎回当天的收益算不算
- 下一篇: android电梯程序设计,课内资源 -