這裏咱們讓蘋果做爲被生產和消費的對象 java
apple.class app
package com.blockQueue;
public class Apple {
private String name;
private String price;
//get和set方法省略
}
this
Producer.class 線程
public class Producer<T> implements Runnable{
private BlockingQueue<T> queue;
public Producer(BlockingQueue<T> q) {
queue = q;
}
public void run() {
try {
while(true){
Apple apple = new Apple();
apple.setName("蘋果");
apple.setName("10.8");
queue.put((T) apple);
System.out.println("生產者生產了一個蘋果"+Thread.currentThread().getName()); 對象
//這裏咱們是間隔一秒生產一個蘋果
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
} get
consumer.class io
public class Consumer<T> implements Runnable {
public Consumer(BlockingQueue<T> queue) {
this.queue = queue;
}
private BlockingQueue<T> queue;
public void run() {
while (true) {
try {
Apple apple= (Apple) queue.take();
System.out.println("消費者消費了一個蘋果"+apple.getName());
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} class
}
test
新建一個test.java 容器
public static void main(String[] args) { BlockingQueue<Apple> bApples = new ArrayBlockingQueue<Apple>(10); //容納10個蘋果的容器 Producer<Apple> producer = new Producer<Apple>(bApples); Consumer<Apple> consumer1 = new Consumer<Apple>(bApples); Consumer<Apple> consumer2 = new Consumer<Apple>(bApples); ExecutorService service = Executors.newScheduledThreadPool(3); //建立一個容量爲3的線程池 service.execute(producer); service.execute(consumer1); service.execute(consumer2); service.shutdown(); }