首先创建一个生产者线程类,继承Runnable接口来创建线程,重写run方法,包含一个BlockingQueue常量参数:
import java.util.concurrent.BlockingQueue;
/**
* author:DingwenDeng
* Date:2018/9/11 9:29
*/
public class Producer implements Runnable {
private final BlockingQueue queue;
public Producer(BlockingQueue queue){
this.queue = queue;
}
@Override
public void run() {
for(int i = 0; i < 10; i++){
try {
queue.put(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
之后创建一个消费者类,同样使用这个阻塞队列
import java.util.concurrent.BlockingQueue;
/**
* author:DingwenDeng
* Date:2018/9/11 9:32
*/
public class Consumer implements Runnable {
private final BlockingQueue queue;
public Consumer(BlockingQueue queue){
this.queue = queue;
}
@Override
public void run() {
for(int i = 0; i < 10; i++){
try {
queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
注意从队列中取元素,api为take(),很容易忘记。
之后创建主函数
public class PandCPattern {
public static void main(String[] args) {
BlockingQueue<Integer> queue = new LinkedBlockingDeque<>();
Thread producer = new Thread(new Producer(queue));
Thread consumer = new Thread(new Consumer(queue));
producer.start();
consumer.start();
}
}
这样既可实现生产者消费者关系了