Моя реализация производителя-потребителя превышает максимальный размерJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Моя реализация производителя-потребителя превышает максимальный размер

Сообщение Anonymous »

Я реализовал Runnable Producer и Runnable Consumer вместе с классом Store. В Магазине выделена полка максимального размера. Каждый производитель добавляет элемент, а каждый потребитель удаляет элемент. Я использую CachedThreadPool для создания обоих типов потоков, где каждый поток выполняется в бесконечном цикле. Я также реализовал два отдельных семафора для класса Runnable: производитель получает начальный размер разрешения, равный максимальному размеру полки магазина, а начальное разрешение потребителя установлено равным нулю.
Когда я запускаю код, который я получил во время выполнения 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]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»