public class ConProducerAndConsumer {
private int queSize= 10;
private PriorityQueue<Integer> queue=new PriorityQueue<>(10);//优先级队列
private Lock lock=new ReentrantLock();//全局锁
private Condition putC=lock.newCondition();
private Condition removeC=lock.newCondition();
public static void main(String[] args) {
ConProducerAndConsumer test=new ConProducerAndConsumer();
for (int i=0;i<3;i++){
Producer producer=test.new Producer();
Consumer consumer=test.new Consumer();
producer.start();//启动生产者
consumer.start();//启动消费者
}
}
class Producer extends Thread{
@Override
public void run() {
produce();
}
volatile boolean flag=true;
private void produce(){
while (flag){
lock.lock();
try {
while (queue.size()==queSize){
try {
System.out.println("队列满,等待空间");
putC.await();
} catch (InterruptedException e) {
flag=false;
}
}
queue.offer(1);//每次插入一个元素
removeC.signalAll();
System.out.println("每次插入一个元素,队列剩余空间:"+(queSize-queue.size()));
}finally {
lock.unlock();
}
}
}
}
class Consumer extends Thread{
@Override
public void run() {
consume();
}
volatile boolean flag=true;
private void consume(){
while (flag){
lock.lock();
try {
while (queue.isEmpty()){//先判断是否为空
try {
System.out.println("队列空,等待生产");
removeC.await();
} catch (InterruptedException e) {
flag=false;
}
}
queue.poll();//移走队首元素
putC.signalAll();//唤醒生产者
System.out.println("从队列中移除元素,队列剩余:"+queue.size());
}finally {
lock.unlock();
}
}
}
}
}
生产消费者(1)
最新推荐文章于 2022-04-06 12:47:34 发布