Когда я запускаю код, который я получил во время выполнения IndexOutOfBoundsException, я понял, что проблема в строке this.items.size()-1, где два потребителя читают один и тот же индекс и пытаются удалить его, что приводит к вышеуказанной ошибке. Но я также получил еще один неожиданный результат: количество элементов в моем списке превышает размер полки. Например, в приведенном ниже коде я установил начальный размер maxShelfs как 5 и дал Producer размер разрешения 5. Но я продолжал получать выходные данные как «Размер потребителя: 6». После этого я попытался поставить точку останова в методе addItem, когда размер списка превышает размер maxShelf. Несколько прогонов подтвердили, что размер списка действительно достиг 6 и что это случается редко. Я не могу понять, почему размер списка равен 6, хотя фактическое разрешение ограничено?
Код: Выделить всё
public class main {
public static void main(String[] args) {
Semaphore ps = new Semaphore(5);
Semaphore cs = new Semaphore(0);
Store s = new Store(5,ps,cs);
ExecutorService es = Executors.newCachedThreadPool();
for(int i =0;i
Подробнее здесь: [url]https://stackoverflow.com/questions/79080152/my-producer-consumer-implementation-is-exceeding-maximum-size[/url]