Я прочитал некоторую информацию о изменчивых переменных и их аналогах AtomicXXX (например, AtomicBoolean).
Но бывают ли ситуации, когда мне нужно сделать сам объект AtomicXXX изменчивым, или в этом нет необходимости?
Я прочитал некоторую информацию о изменчивых переменных и их аналогах AtomicXXX (например, AtomicBoolean).
Но бывают ли ситуации, когда мне нужно сделать сам объект AtomicXXX изменчивым, или в этом нет необходимости?
В этом нет необходимости - на самом деле атомарные объекты действительно должны быть установлены как final
!!
Пример:
private final AtomicInteger atomicInt = new AtomicInteger(0);
private volatile int volatileInt = 0;
public void doStuff() {
// To use the atomic int, you use the setters and getters!
int gotAnInt = atomicInt.getAndIncrement();
// To use a volatile, access and set it directly.
int gotAnotherInt = volatileInt;
volatileInt = someOtherInt;
}
Прочтите this, чтобы получить некоторые советы и объяснения, когда использовать volatile. Но в основном, если вы используете AtomicXXX, вам НЕ НУЖНО использовать volatile.