用BlockingQueue实现生产者消费者问题
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.BlockingQueue;
public class ProcuceConsumer {
private static BlockingQueue<Object> queue=new ArrayBlockingQueue<>(5);
private static class Produce extends Thread{
@Override
public void run(){
try{
queue.put("1");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("produce");
}
}
private static class Consumer extends Thread{
@Override
public void run(){
try {
queue.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Consumer");
}
}
public static void main(String[] args){
for(int i=0;i<2;i++){
Produce p=new Produce();
p.start();
}
for(int i=0;i<5;i++){
Consumer c=new Consumer();
c.start();
}
for(int i=0;i<4;i++){
Produce p=new Produce();
p.start();
}
}
}
运行结果如下
队列的容量设置为5,队列空时take()阻塞,满时put()阻塞