Java · 38 строк
На складе 4 потока приёма кладут заказы в очередь на сборку, 40 терминалов сборщиков их забирают. Очередь ограничена 500 заказами, табло показывает её размер.
Отметьте строки с ошибками.
В работе: Распределение заказов по сборщикам на складе.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Плюс 1 вопрос про поведение программы — на зачёт не влияют. Ответ один на подход: после него показываем разбор.
Источник: на задачах Wildberries: сборка заказов на складе. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
import java.util.ArrayDeque;import java.util.Deque;// Очередь заказов на сборку: 4 потока приёма кладут, 40 терминалов сборщиков забирают.public class PickQueue {private final Deque<Long> orders = new ArrayDeque<>();private final int capacity;public PickQueue(int capacity) {this.capacity = capacity;}public void put(long orderId) throws InterruptedException {synchronized (this) {if (orders.size() == capacity) {wait();}orders.addLast(orderId);notify();}}public long take() throws InterruptedException {synchronized (this) {if (orders.isEmpty()) {wait();}long id = orders.removeFirst();notify();return id;}}// Размер очереди для табло на складе.public int size() {return orders.size();}}