本文共 6567 字,大约阅读时间需要 21 分钟。
package org.dennist.thread.demo; /** * * Product.java * * @version : 1.1 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-2-25 上午09:03:38 * * TODO : class Product.java is used for ... * */ public class Product { //产品类 private int productId = 0; public Product(int productId){ this.productId = productId; } public int getProductId() { return productId; } public void setProductId(int productId) { this.productId = productId; } @Override public String toString() { return ""+productId; } } |
package org.dennist.thread.demo; /** * * StoreHouse.java * * @version : 1.1 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-2-25 上午08:55:33 * * TODO : 仓库 * */ public class StoreHouse { private int base = 0; private int top = 0; //仓库大小 private Product[] products = new Product[10]; /** * 生产产品 * @param product */ public synchronized void push(Product product){ if(top==products.length){ //如果仓库已满,等待消费 try { System.out.println("仓库已满,正在等待消费.."); wait(); }catch (InterruptedException e) { System.out.println("stop push product because other reasons"); } } //仓库未满,将生产的产品入库 products[top] = product; //库中产品数量+1 top++; } /** * 消费产品 * @return */ public synchronized Product pop() { Product product = null; while (top == base) { //仓库未空,不能消费 notify(); try { System.out.println("仓库已空,正等待生产..."); wait(); } catch (InterruptedException e) { System.out.println("stop push product because other reasons"); } } //仓库未空,等待消费 top--; product = products[top]; products[top] = null; return product; } } |
package org.dennist.thread.demo; /** * * Producer.java * * @version : 1.1 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-2-25 上午08:53:16 * * TODO : 生产者 * */ public class Producer implements Runnable{ private String producerName ; private StoreHouse storeHouse ; public Producer(String producerName, StoreHouse storeHouse) { this.producerName = producerName; this.storeHouse = storeHouse; } public void setProducerName(String producerName) { this.producerName = producerName; } public String getProducerName() { return producerName; } @Override public void run() { execProcuct(); } private void execProcuct() { int i = 0; while(true){ i++; Product pro = new Product(i); storeHouse.push(pro); System.out.println(getProducerName() + " 生产了 " + pro); try { Thread.sleep(2000); } catch (InterruptedException e) { return; } } } } 消费者类 |
package org.dennist.thread.demo; /** * * Consumer.java * * @version : 1.1 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-2-25 上午08:53:47 * * TODO : 消费者 * */ public class Consumer implements Runnable{ private String consumerName = null; private StoreHouse storeHouse = null; public Consumer(String consumerName, StoreHouse storeHouse) { this.consumerName = consumerName; this.storeHouse = storeHouse; } public void setConsumerName(String consumerName) { this.consumerName = consumerName; } public String getConsumerName() { return consumerName; } public void execConsume() { while (true) { System.out.println(getConsumerName() + " 消费了 " + storeHouse.pop()); try { Thread.sleep(5000); } catch (InterruptedException e) { return; } } } @Override public void run() { execConsume(); } } |
package org.dennist.thread.demo; /** * * TestPC.java * * @version : 1.1 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-2-25 上午09:18:52 * * TODO : 生产者消费者模拟 * */ public class TestPC { public static void main(String[] args) { StoreHouse storeHouse = new StoreHouse(); Producer producer = new Producer("生产者", storeHouse); Consumer comsumer = new Consumer("消费者", storeHouse); Thread t1 = new Thread(producer); Thread t2 = new Thread(comsumer); t1.start(); t2.start(); } } |
转载地址:http://uwbbl.baihongyu.com/