java 多线程经典例子——生产者与消费者的问题
2012-08-01 14:17
756 查看
产品名称类:
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(); } } }
消费者类
/** * 消费者 * @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 block System.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多线程之生产者消费者经典问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者经典问题
- java多线程总结六:经典生产者消费者问题实现
- java多线程之生产者消费者经典问题
- java多线程-生产者消费者经典问题 基于BlockingQueue
- 多线程经典案例——生产者/消费者问题的Java实现与详解
- 多线程经典问题之生产者消费者问题的JAVA实现
- java多线程之生产者和消费者经典问题案例
- java多线程之生产者消费者经典问题
- java多线程经典的生产者消费者问题
- java多线程之生产者消费者经典问题
- java多线程之生产者消费者经典问题
- java多线程实现生产者与消费者---经典问题
- java多线程 生产者消费者问题
- Linux 系统应用编程——多线程经典问题(生产者-消费者)
- 多线程之经典生产者消费者问题
- Java 多线程实现生产者消费者问题(wait/notify)