java 多线程经典例子——生产者与消费者的问题
生活随笔
收集整理的這篇文章主要介紹了
java 多线程经典例子——生产者与消费者的问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
產品名稱類:
public class Product {//產品名稱private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}生產者類:/*** 生產者* @author 飯香**/
public class Producer implements Runnable{private Shop shop;//要去送貨的商店public Producer(Shop shop){this.shop=shop;}public void run() {for(int i=0;i<100;i++){shop.produ();}} }
import java.util.ArrayList; import java.util.List; /*** 模擬商店 (進貨/銷售)* @author fx**/ public class Shop {private static int i=0;//產品的容器;達到容器暫停生產,消費到0等待生產private static List<Product> list;static{list= new ArrayList<Product>();}/*** 生產產品*/public synchronized void produ(){if(list.size()>=5){try {System.out.println("--------------生產商品"+i+"時,達到了總數暫停生產-------");this.wait();//進入休眠} catch (InterruptedException e) {System.out.println(e.toString());e=null;}} //生產商品Product product= new Product();product.setName("商品"+i);list.add(product);System.out.println("生產了商品---->"+product.getName()+"商品總數"+i);System.out.println("容器容量"+list.size());i++;super.notify();}/*** 消費產品* @return*/public synchronized void cousu(){if(list.size()==0){//消費完時,掛起System.out.println("+++++++++++++++++++++++商品消費完了.等待+++++++++++++++=");try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println(e.toString());e=null;}}Product product=list.get(0);list.remove(0);System.out.println("消費了獲得了商品-->"+product.getName());System.out.println("容器容量"+list.size());super.notify();} }
測試代碼類: public static void main(String[] args) {Shop shop=new Shop();//商店Producer pro=new Producer(shop);Cousumer cou = new Cousumer(shop);new Thread(pro,"pro").start();new Thread(cou,"cou").start();}
轉自: ?http://51even.iteye.com/blog/767935
消費者類
/*** 消費者* @author 飯香**/ public class Cousumer implements Runnable{private Shop shop;//要去消費的商店public Cousumer(Shop shop){this.shop=shop;}public void run() {for(int i=0;i<100;i++){//消費100次shop.cousu();}}}模擬商店(一切圍繞商店,商店只能有一個,產品隨便多個實例.這個也是別人問我總是出錯的地方.對象思想)?
import java.util.ArrayList; import java.util.List; /*** 模擬商店 (進貨/銷售)* @author fx**/ public class Shop {private static int i=0;//產品的容器;達到容器暫停生產,消費到0等待生產private static List<Product> list;static{list= new ArrayList<Product>();}/*** 生產產品*/public synchronized void produ(){if(list.size()>=5){try {System.out.println("--------------生產商品"+i+"時,達到了總數暫停生產-------");this.wait();//進入休眠} catch (InterruptedException e) {System.out.println(e.toString());e=null;}} //生產商品Product product= new Product();product.setName("商品"+i);list.add(product);System.out.println("生產了商品---->"+product.getName()+"商品總數"+i);System.out.println("容器容量"+list.size());i++;super.notify();}/*** 消費產品* @return*/public synchronized void cousu(){if(list.size()==0){//消費完時,掛起System.out.println("+++++++++++++++++++++++商品消費完了.等待+++++++++++++++=");try {this.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blockSystem.out.println(e.toString());e=null;}}Product product=list.get(0);list.remove(0);System.out.println("消費了獲得了商品-->"+product.getName());System.out.println("容器容量"+list.size());super.notify();} }
測試代碼類: public static void main(String[] args) {Shop shop=new Shop();//商店Producer pro=new Producer(shop);Cousumer cou = new Cousumer(shop);new Thread(pro,"pro").start();new Thread(cou,"cou").start();}
轉自: ?http://51even.iteye.com/blog/767935
總結
以上是生活随笔為你收集整理的java 多线程经典例子——生产者与消费者的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 死锁的原因详解
- 下一篇: 日期类的加减及java中所以日期类的操作