熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

Java線程;生產消費者例子

2013-11-23 19:52:35  來源: Java高級技術 

  小小回顧寫了個簡單的demo項目中沒有過 還能記得紀念一下

  產品的entity

  Java代碼

  public class Product {

  //產品名稱

  private String name;

  public String getName() {

  return name;

  }

  public void setName(String name) {

  thisname = name;

  }

  }

  生產者

  Java代碼

  /**

  * 生產者

  * @author 飯香

  *

  */

  public class Producer implements Runnable{

  private Shop shop;//要去送貨的商店

  public Producer(Shop shop){

  thisshop=shop;

  }

  public void run() {

  for(int i=;i<;i++){

  shopprodu();

  }

  }

  }

  消費者

  Java代碼

  /**

  * 消費者

  * @author 飯香

  *

  */

  public class Cousumer implements Runnable{

  private Shop shop;//要去消費的商店

  public Cousumer(Shop shop){

  thisshop=shop;

  }

  public void run() {

  for(int i=;i<;i++){//消費

  usu();

  }

  }

  }

  模擬商店(一切圍繞商店商店只能有一個產品隨便多個實例這個也是別人問我總是出錯的地方對象思想)

  Java代碼

  import javautilArrayList;

  import javautilList;

  /**

  * 模擬商店 (進貨/銷售)

  * @author fx

  *

  */

  public class Shop {

  private static int i=;

  //產品的容器;達到容器暫停生產消費到等待生產

  private static List<Product> list;

  static{

  list= new ArrayList<Product>();

  }

  /**

  * 生產產品

  */

  public synchronized void produ(){

  if(listsize()>=){

  try {

  Systemoutprintln(生產商品+i+達到了總數暫停生產);

  thiswait();//進入休眠

  } catch (InterruptedException e) {

  Systemoutprintln(etoString());

  e=null;

  }

  } //生產商品

  Product product= new Product();

  productsetName(商品+i);

  listadd(product);

  Systemoutprintln(生產了商品>+productgetName()+商品總數+i);

  Systemoutprintln(容器容量+listsize());

  i++;

  supernotify();

  }

  /**

  * 消費產品

  * @return

  */

  public synchronized void cousu(){

  if(listsize()==){//消費完時掛起

  Systemoutprintln(+++++++++++++++++++++++商品消費完了等待+++++++++++++++=);

  try {

  thiswait();

  } catch (InterruptedException e) {

  // TODO Autogenerated catch block

  Systemoutprintln(etoString());

  e=null;

  }

  }

  Product product=listget();

  listremove();

  Systemoutprintln(消費了獲得了商品>+productgetName());

  Systemoutprintln(容器容量+listsize());

  supernotify();

  }

  }

  測試代碼

  Java代碼

  public static void main(String[] args) {

  Shop shop=new Shop();//商店

  Producer pro=new Producer(shop);

  Cousumer cou = new Cousumer(shop);

  new Thread(propro)start();

  new Thread(coucou)start();

  }

  生產了商品>商品商品總數

  容器容量

  消費了獲得了商品>商品

  容器容量

  +++++++++++++++++++++++商品消費完了等待+++++++++++++++=

  生產了商品>商品商品總數

  容器容量

  消費了獲得了商品>商品

  容器容量

  +++++++++++++++++++++++商品消費完了等待+++++++++++++++=

  生產了商品>商品商品總數

  容器容量

  消費了獲得了商品>商品

  容器容量

  +++++++++++++++++++++++商品消費完了等待+++++++++++++++=

  生產了商品>商品商品總數

  容器容量

  生產了商品>商品商品總數

  容器容量

  消費了獲得了商品>商品

  容器容量

  生產了商品>商品商品總數

  容器容量

  消費了獲得了商品>商品

  容器容量

  生產了商品>商品商品總數

  容器容量

  消費了獲得了商品>商品

  容器容量

  消費了獲得了商品>商品

  容器容量


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27600.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.