2011-01-18 2 views
30

Я хотел бы использовать Связанный список, как описано в статье this. Однако я не нашел Java-реализации в Интернете.Lock-Free Concurrent Linked List в Java

Если нет реализации java вышеупомянутого Связанного списка, я думаю, я бы использовал java.util.concurrent.ConcurrentLinkedQueue<E>. Это хороший выбор (на самом деле это не связанный список)?

Если это нехороший выбор, знает ли кто-нибудь о надежной параллельной (потокобезопасной) безжизненной (незакрепленной) реализации Linked List в Java?

+0

Это не блокировка в любой форме формы (он использует блокировки для добавления/удаления) - комментарий о дохе цели не прошел ... (это касалось LinkedBlockingDeque) – bestsss

+0

Ну, большой вопрос: почему вы думаете, что вы хотите получить параллельный список любой формы или формы? Большинство методов списка не имеют смысла в совместной параллельной структуре. Почему вы получите n-й элемент? Что это значит, чтобы получить n-й элемент? Такие вещи, как размер, являются эфемерными и не имеют никакой ценности для мониторинга. Можете ли вы объяснить немного больше о том, как вы хотите это использовать? http://permalink.gmane.org/gmane.comp.java.jsr.166-concurrency/6321 –

+0

Я хочу реализовать одиночный «физический» буфер, который используется n «логическими» буферами, где каждый логический буфер определяется только его начальным и конечным элементами, st У меня нет избыточного представления моих данных в памяти. – ptikobj

ответ

40

ConcurrentLinkedQueue - это превосходная свободная очередь для блокировки и делает то, что может сделать одновременный одиночный связанный список. Небольшое предупреждение: если вы не используете опрос или просмотр и только итератор() (+ .remove()), он будет утечка памяти.

Это выдающийся Queue.

+6

JDK 7 имеет ConcurrentLinkedDeque –

+4

+1 Хорошая ссылка для удаления утечки памяти –

+0

, скажем, мне нужен ConcurrentLinkedDeque, насколько безопасно устанавливается текущая версия предварительного просмотра jdk7? – ptikobj