Использование AtomicInteger в качестве счетчика для спискаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Использование AtomicInteger в качестве счетчика для списка

Сообщение Anonymous »

Я изучаю многопоточность. У меня есть код ниже

Код: Выделить всё

    AtomicInteger counter = new AtomicInteger(0);
Lock lock = new ReentrantLock(true);
public String get(CopyOnWriteArrayList fruits) {
String next;
try {
lock.lock();
counter.compareAndSet(fruits.size(), 0);
next = fruits.get(counter.getAndIncrement());
}finally {
lock.unlock();
}
return next;
}
Примечание: список содержит не более 10 элементов.
Я думаю, что использование AtomicInteger здесь бесполезно, поскольку я уже блокирую критическую секцию.
Есть ли там способ использовать Atomicnteger и не блокировать. Я использую блокировку, поскольку две строки ниже могут генерировать состояние гонки.
counter.compareAndSet(fruits.size(), 0);
fruits.get(counter.getAndIncrement());Пытаемся создать потокобезопасный счетчик, который будет использоваться для получения элемента из списка.

Подробнее здесь: https://stackoverflow.com/questions/787 ... r-for-list
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»