У меня есть метод onTrade, определенный ниже как вызываемый 6
темы:
public void onTrade(Trade trade) {
System.out.println(tradeCounter.incrementAndGet());
}
Почему вывод:
2 5 4 3 1 6
Вместо 1 2 3 4 5 6?
Почему не должен быть выводом? Или почему бы не 3 1 4 6 5 2? Или любая другая перестановка 1 2 3 4 5 6?
Использование AtomicInteger
и его метода incrementAndGet()
гарантирует, что каждый поток получает разные значения и что шесть полученных значений являются последовательными, без синхронизации. Но это не имеет ничего общего с порядком, в котором полученные значения печатаются позже.
Если вы хотите, чтобы результаты печатались в том же порядке, в котором они получены, синхронизация - это самый простой способ. В этом случае использование AtomicInteger
ничего не даст вам по сравнению с использованием простого int
(для этой конкретной цели):
int tradeCounter = 0;
synchronized public void onTrade(Trade trade) {
System.out.println(++tradeCounter);
}
В качестве альтернативы, не беспокойтесь о порядке печати вывода. Подумайте: имеет ли смысл какой-либо порядок вывода по какой-либо причине?