Код: Выделить всё
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());Пытаюсь создать потокобезопасный счетчик, который будет использоваться для получения элемента из списка.
Мне нужно вращение здесь, как будто счетчик увеличивается до 10, а затем возвращается обратно к 0 для реализации циклического перебора.
Подробнее здесь: https://stackoverflow.com/questions/787 ... r-for-list