这里有新鲜出炉的 Java 函数式编程,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
这篇文章主要介绍了 JAVA 多线程实现生产者消费者的实例详解的相关资料, 需要的朋友可以参考下
JAVA 多线程实现生产者消费者的实例详解
下面的代码实现了生产者消费者的问题
Product.Java
- package consumerProducer;
- public class Product {
- private String id;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- public Product(String id) {
- this.id = id;
- }
- public String toString() {
- return "product " + id;
- }
- }
Pool.java
- package consumerProducer;
- import java.util.*;
- public class Pool {
- private int number=0;
- private List<Product>products=new LinkedList<Product>();
- public int getNumber() {
- return number;
- }
- public void setNumber(int number) {
- this.number = number;
- }
- public synchronized Product consumeProduct(){ //可以去掉synchronized关键字
- if(products.size()>0)
- { Product p= products.get(0);
- products.remove(0);
- number--;
- return p;
- }
- else
- return null;
- }
- public synchronized void addProduct(Product p){ //可以去掉synchronized关键字
- products.add(p);
- number++;
- }
- }
Consumer.java
- package consumerProducer;
- public class Consumer implements Runnable {
- private String id;
- Pool pool;
- public Consumer(String id,Pool pool)
- {
- this.id=id;
- this.pool=pool;
- }
- @Override
- public void run() {
- while(!Thread.currentThread().interrupted())
- {
- Product product=null;
- synchronized(pool){
- while(pool.getNumber()<=0)//生产不足
- {
- try {
- pool.wait();//生产者等待
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- product=pool.consumeProduct();
- }
- System.out.println("consuming "+id+product.toString());
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
Producer.java
- package consumerProducer;
- public class Producer implements Runnable{
- private int i_p=0;
- private String id;
- Pool pool;
- int i=0;
- public Producer(String id ,Pool pool)
- {
- this.id=id;
- this.pool=pool;
- }
- public Product createProduct()
- {
- return new Product(String.valueOf(++i_p));
- }
- @Override
- public void run() {
- // TODO Auto-generated method stub
- while(!Thread.currentThread().interrupted())
- {
- Product p=new Product(String.valueOf(++i_p));
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- synchronized(pool)
- {
- pool.addProduct(p);
- System.out.println("producer "+id+" adding product...."+p.toString());
- pool.notifyAll();
- }
- }
- }
- }
Main.java
- package consumerProducer;
- public class Main {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Pool pool = new Pool();
- for (int i = 0; i < 5; i++) {
- Thread consumer = new Thread(new Consumer("consumer " + i, pool));
- Thread producer = new Thread(new Producer("producer " + i, pool));
- consumer.start();
- producer.start();
- }
- }
- }
来源: http://www.phperz.com/article/17/0821/338353.html