Нюансы Java разработки

Этот блог о Java разработке и в деталях описывает наиболее интересные темы.

Посты с тегом «SynchronousQueue»


SynchronousQueue или TransferQueue

В Java 7 появился новый интерфейс TransferQueue в добавлении к уже существующему со времен Java 5 SynchronousQueue. Возникает резонный вопрос — для чего?

Оглавление Для начала о TransferQueue Пара слов о SynchronousQueue SynchronousQueue vs TransferQueue Для начала о TransferQueue В Java 7 появился новый интерфейс TransferQueue и соответствующая реализация LinkedTransferQueue. TransferQueue расширяет BlockingQueue, который в свою очередь расширяет Queue интерфейс, добавленный в Java 5. BlockingQueue — это очередь, которая может блокировать и потоки Поставщиков (Producer) при добавлении элементов в переполненную очередь, и потоки Потребителей (Consumer), при извлечении из пустой очереди. Основная задача блокирующих очередей — справляться с наплывом данных, которые система не в состоянии обработать за приемлемое время. TransferQueue развивает эту идею и идет дальше, блокируя поток Поставщика до тех пор, пока элемент не будет извлечен потоком Потребителя. Ключевой метод — transfer — блокировка происходит до тех пор, пока элемент не перейдет от одного потока к другому. Существуют дополнительные методы — две формы передачи элементов tryTransfer — либо блокирующая с таймаутом, либо неблокирующая, но осуществляющая передачу только при наличии ожидающего Потребителя. Так же существует пара вспомогательных методов hasWaitingConsumer и getWaitingConsumerCount. Пара слов о SynchronousQueue Все мы помним о SynchronousQueue, который появил... Читать далее