import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* Created by wisgood .
*/
public class ProducerConsumerWithBlockingQueueDemo {
public static void main(String[] args) {
BlockingQueue<String> productFactory = new ArrayBlockingQueue(10);
new Thread(new ProducerWithBlockingQueue(productFactory), "1号生产者").start();
new Thread(new ConsumerWithBlockingQueue(productFactory), "1号消费者").start();
new Thread(new ConsumerWithBlockingQueue(productFactory), "2号消费者").start();
}
}
// 生产者
class ProducerWithBlockingQueue implements Runnable {
private BlockingQueue<String> productFactory;
public ProducerWithBlockingQueue( BlockingQueue<String> productFactory) {
this.productFactory = productFactory;
}
public void run() {
int i = 0;
while (true) {
try {
String product = String.valueOf(i) ;
//只有下面1行代码会互斥访问productFactory
productFactory.put(product);
System.out.println("线程(" + Thread.currentThread().getName() + ")生产了一件产品:" + product + ";当前剩余商品" + productFactory.size() + "个");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
}
}
}
// 消费者
class ConsumerWithBlockingQueue implements Runnable {
private BlockingQueue<String> productFactory;
public ConsumerWithBlockingQueue(BlockingQueue<String> productFactory) {
this.productFactory = productFactory;
}
public void run() {
while (true) {
try {
System.out.println("线程(" + Thread.currentThread().getName() + ")消费了一件产品:" + productFactory.take() + ";当前剩余商品" + productFactory.size() + "个");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
尊重原创,原文地址:https://blog.csdn.net/wisgood/article/details/79732653