Одновременные вызовы на BlockingQueue в Java - PullRequest
1 голос
/ 25 июля 2011

Я знаю, что одновременное добавление в очередь stl в c ++ может вызвать проблемы, и способ решить эту проблему заключается в добавлении блокировки мьютекса вокруг всех вызовов add / remove.

Но сейчас я программирую на Java и использую BlockingQueue.В документации только сказано, что поток, который вызывает метод put / take для объекта BlockingQueue, блокируется неявно до тех пор, пока не останется место для размещения / чего-то, что можно взять соответственно.Тем не менее, в нем ничего не говорится о одновременных вызовах "положить / взять".Нужно ли защищать их с помощью блокировки мьютекса?

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Из документации :

Реализации BlockingQueue являются поточно-ориентированными.

Поэтому блокировка не требуется.

1 голос
/ 25 июля 2011

Нет, очереди блокировки являются поточно-ориентированными.Начиная с документы :

Реализации BlockingQueue являются поточно-ориентированными.Все методы очередей достигают своих эффектов атомарно, используя внутренние блокировки или другие формы управления параллелизмом

...