使用Blockingquene的生产者消费者模型
生产者
public class Producer implements Runnable{
BlockingQueue queue ;
public Producer(BlockingQueue<String> queue){
this.queue = queue;
}
@Override
public void run() {
try {
String temp = "A product由生产线程:"+Thread.currentThread().getName();
System.out.println("i have a product:"+Thread.currentThread().getName());
queue.put(temp);//塞不下时会阻塞
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
消费者
public class Consumer implements Runnable{
BlockingQueue<String> queue;
public Consumer(BlockingQueue<String> queue){
this.queue = queue;
}
@Override
public void run() {
try {
String temp = queue.take();//空了的时候也会阻塞
System.out.println("消费了"+temp);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
TestResult
public class TestProducerAndConsumer {
public static void main(String[] args) {
BlockingQueue<String> queue = new LinkedBlockingDeque<>(2);
Consumer consumer = new Consumer(queue);
Producer producer = new Producer(queue);
for (int i=0;i<5;i++){
new Thread(producer,"Producer"+(i+1)).start();
new Thread(consumer,"Consumer"+(i+1)).start();
}
}
}