Связаны ли в LinkedBlockingQueue методы удаления и удаления?

Я использую LinkedBlockingQueue между двумя разными streamами. Один stream добавляет данные через add , в то время как другой stream получает данные через take .

Мой вопрос: мне нужно синхронизировать доступ, чтобы add и take . LinkedBlockingQueue ли в LinkedBlockingQueue методы удаления и удаления?

Да. Из документов :

«Реализации BlockingQueue являются streamобезопасными. Все методы очередей выполняют свои эффекты атомарно, используя внутренние блокировки или другие формы контроля параллелизма. Однако операции массового сбора addAll, containsAll, keepAll и removeAll не обязательно выполняются атомарно, если в реализации не указано иное. Таким образом, возможно, например, для addAll (c) сбой (сброс исключения) после добавления только некоторых элементов в c. ”

Да, методы BlockingQueue add() и take() являются streamобезопасными, но с разницей .

add () и take() использует 2 разных объекта ReentrantLock .

Метод add( ) использует

 private final ReentrantLock putLock = new ReentrantLock(); 

Метод take() использует

 private final ReentrantLock takeLock = new ReentrantLock(); 

Следовательно, синхронизируется одновременный доступ к методу add() . Аналогичным образом synchronized одновременный доступ к методу take() .

Но одновременный доступ к методу add() и take() не synchronized так как они используют 2 разных объекта блокировки (кроме случаев, когда условие окончания очереди равно / пусто).

Просто Да, он определенно streamобезопасен, иначе он не квалифицировался бы как кандидат на хранение элемента ThreadPoolExecutor .

Просто добавьте и извлеките элемент, не беспокоясь о параллелизме для BlockingQueue.

  • Синхронизированный блок Java против Collections.synchronizedMap
  • Лучший инструмент для синхронизации баз данных MySQL
  • Символические ссылки и синхронизированные папки в Vagrant
  • Следует ли синхронизировать метод запуска? Почему или почему нет?
  • Зачем использовать ReentrantLock, если вы можете использовать синхронизированный (это)?
  • Правильный способ синхронизации ArrayList в java
  • Синхронизация по целочисленному значению
  • Как синхронизированные статические методы работают на Java?
  • Коллекции. Синхронизированный список и синхронизация
  • C # версия синхронизированного ключевого слова java?
  • Как определить, заблокирован ли объект (синхронизирован), чтобы он не блокировался на Java?
  • Давайте будем гением компьютера.