Я пытаюсь понять проблему производителя. Чтобы повторить проблему, я написал следующий код
package com.company;
import java.util.ArrayDeque;
import java.util.Queue;
public class ProducerConsumerProblem {
private static Queue<Integer> q = new ArrayDeque<>(5);
public static void main(String args[]) {
Producer p = new Producer();
Consumer c = new Consumer();
Thread t = new Thread( p );
Thread t1 = new Thread( c );
t.start();
t1.start();
}
public static class Producer implements Runnable {
@Override
public void run() {
while(true) {
if (q.size() == 5) {
continue;
}
System.out.println( "Adding to queue" );
q.add( 1 );
}
}
}
public static class Consumer implements Runnable {
@Override
public void run() {
while(true) {
if (q.size() == 0) {
continue;
}
System.out.println( "Removing from queue" );
q.remove();
}
}
}
}
Я ожидал получить что-то вроде concurrent exception
, но вместо этого код останавливается, когда очередь пуста или очередь заполнена. Мой вопрос заключается в том, почему код останавливается, когда очередь пуста или заполнена, потому что я поместил и потребителя, и производителя в бесконечное число l oop, даже если они одновременно плохо читают, но в какой-то момент они будут хорошо читать и либо производитель, либо потребитель должен работать. Пожалуйста, помогите мне с ситуацией