Код: Выделить всё
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;
}
Я думаю, что использование AtomicInteger здесь бесполезно, поскольку я уже блокирую критическую секцию.
Есть ли там способ использовать Atomicnteger и не блокировать. Я использую блокировку, поскольку две строки ниже могут генерировать состояние гонки.
counter.compareAndSet(fruits.size(), 0);
fruits.get(counter.getAndIncrement());Пытаемся создать потокобезопасный счетчик, который будет использоваться для получения элемента из списка.
Подробнее здесь: https://stackoverflow.com/questions/787 ... r-for-list