Использование 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

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