package concurrent;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* Created by geekgao on 16-3-4.
*/
public class ProducerAndConsumer2 {
public static void main(String[] args) {
BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<Integer>(5);
//一个生产者和两个消费者
new Thread(new Producer2(blockingQueue)).start();
new Thread(new Consumer2(blockingQueue)).start();
new Thread(new Consumer2(blockingQueue)).start();
}
}
class Producer2 implements Runnable {
private BlockingQueue<Integer> blockingQueue;
public Producer2(BlockingQueue<Integer> blockingQueue) {
this.blockingQueue = blockingQueue;
}
public void run() {
try {
//生产20个产品
for (int i = 0;i < 20;i++) {
//当队列满了,put会自己阻塞住
blockingQueue.put(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Consumer2 implements Runnable {
private BlockingQueue<Integer> blockingQueue;
public Consumer2(BlockingQueue<Integer> blockingQueue) {
this.blockingQueue = blockingQueue;
}
public void run() {
//一直从队列中取产品来消费
while(true) {
try {
//队列为空时take会阻塞住
System.out.println(Thread.currentThread().getName() + ":" + blockingQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* Created by geekgao on 16-3-4.
*/
public class ProducerAndConsumer2 {
public static void main(String[] args) {
BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<Integer>(5);
//一个生产者和两个消费者
new Thread(new Producer2(blockingQueue)).start();
new Thread(new Consumer2(blockingQueue)).start();
new Thread(new Consumer2(blockingQueue)).start();
}
}
class Producer2 implements Runnable {
private BlockingQueue<Integer> blockingQueue;
public Producer2(BlockingQueue<Integer> blockingQueue) {
this.blockingQueue = blockingQueue;
}
public void run() {
try {
//生产20个产品
for (int i = 0;i < 20;i++) {
//当队列满了,put会自己阻塞住
blockingQueue.put(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class Consumer2 implements Runnable {
private BlockingQueue<Integer> blockingQueue;
public Consumer2(BlockingQueue<Integer> blockingQueue) {
this.blockingQueue = blockingQueue;
}
public void run() {
//一直从队列中取产品来消费
while(true) {
try {
//队列为空时take会阻塞住
System.out.println(Thread.currentThread().getName() + ":" + blockingQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}