Связаны ли в 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.

  • Как работает блокировка?
  • Синхронизировать устройства Android через время GPS?
  • Убедитесь, что синхронизированные блокировки Java выполнены в порядке?
  • Явная блокировка Java
  • Ожидание выполнения нескольких streamов в Java
  • Синхронизированный блок Java против Collections.synchronizedMap
  • C ++ 0x не имеет семафоров? Как синхронизировать streamи?
  • Почему не логично синхронизировать логику?
  • Монитор против Mutex в c #
  • Избегайте синхронизации (это) в Java?
  • Wait Firebase async извлекает данные на Android
  • Давайте будем гением компьютера.