такой же:
1. LinkedBlockqueue и ArrayBlockingQueue Оба реализуют интерфейс BlockingQueue;
2. LinkedBlockingQueue и ArrayBlockingQueue - оба блокируемые очереди
Повторное количество и состояние используются внутри, для обеспечения синхронизации производства и потребления;
Когда очередь пуст, потребительский поток блокируется; Когда очередь заполнена, нить производителя заблокирована;
Используйте метод условия для синхронизации и общения: wait () и signal ()
другой:
1. Как можно увидеть с приведенной выше картины, их механизм блокировки отличается.
Замки в LinkedBlockingQue
Производители и потребители ArrayBlockingQueue используют тот же замок;
2. Их основной механизм реализации также отличается
LinkedBlockingQueue поддерживает связанную структуру списка внутри
Во время производства и потребления необходимо создать объекты узла для введения или удаления. В системах с большими партиями данных давление на GC будет больше.
ArrayBlockingQueue поддерживает массив внутри
Во время производства и потребления объекты перечисления непосредственно вставляются или удаляются, и никакие дополнительные экземпляры объектов не генерируются или разрушаются.
3. Различия в строительстве
LinkedBlockingQueue имеет размер вместимости по умолчанию: integer.max_value, конечно, вы также можете передать указанный размер емкости.
При инициализации Arrayblockingqueue необходимо передавать значение емкости.
Вы можете знать, посмотрев на метод строительства, предоставленный им
4. Выполните метод clear ()
Когда LinkedBlockingQueue выполняет метод прозрачного, будет добавлено два замка.
5. Статистика Количество элементов
Объект AtomicInteger используется в LinkedBlockingQueue, чтобы подсчитать количество элементов
ArrayBlockingQueue использует тип int, чтобы считать элементы