`
java183
  • 浏览: 13380 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

生产者与消费者问题Java实现

阅读更多
生产者与消费者问题Java实现

产品类:

public class Product {
  
    private int id;
    private String value;

    public Product(int id,String value){
        this.id=id;
        this.value=value;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
  
}


公用缓冲池
import java.util.LinkedList;

public class ProductTable {
  
    // 缓冲池
    private LinkedList<Product> products = new LinkedList<Product>();

    // 生产
    public synchronized void produce(Product product) {
        while(products.size() >= 10) { // 容量限制為 10
            try {
                wait();
            }
            catch(InterruptedException e) {}
        }
        products.addLast(product);
        System.out.println(product.getId()+" added");
        notifyAll();
    }

    // 消费
    public synchronized Product consume() {
        while(products.size() <= 0) {
            try {
                wait();
            }
            catch(InterruptedException e) {}
        }
        Product product = (Product) products.removeFirst();
        System.out.println(product.getId()+" removed");
        notifyAll();
        return product;
    }
  
}

生产者:

public class Producer implements Runnable {
  
    private ProductTable productTable;

    public Producer(ProductTable productTable) {
        this.productTable = productTable;
    }

    public void run() {
    for (int i=0; i<5; i++) {
        Product p = new Product(i, "product " + "-" + i);
            productTable.produce(p);
            try {
                Thread.sleep((int) (Math.random() * 3000)); // 等待一个随机的时间
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
    }
    }
}


消费者:
public class Consumer implements Runnable {
  
    private ProductTable productTable;

    public Consumer(ProductTable productTable) {
        this.productTable = productTable;
    }

    public void run() {
        for (int i = 1; i <= 5; i++) {
            try {
                Thread.sleep((int) (Math.random() * 3000)); // 等待一个随机的时间
            }
            catch (InterruptedException e) {
                e.printStackTrace();
            }
            productTable.consume();
        }
    }
}

测试类:

public class Test {

    public static void main(String[] args) {
  
        ProductTable queue = new ProductTable();
      
        // 生产者线程体
        Producer producer = new Producer(queue);
      
        // 消费者线程体
        Consumer consumer = new Consumer(queue);
      
        for (int i=0; i<2; i++) {
        Thread prod = new Thread(producer);
        prod.start();
        }
      
        for (int i=0; i<2;i++) {
        Thread consu = new Thread(consumer);
        consu.start();
        }
      
    }
  
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics