Всем привет. Я тут книжку одну читаю и не понимаю один момент.
В примере создаётся веб-приложение для добавления тикетов, у каждого тикета есть id. Для счётчика тикетов используется поле в самом сервлете
private volatile int TICKET_ID_SEQUENCE = 1;
Используется это в коде всего в одном месте и следующим образом (это, разумеется, функция добавления тикета).
synchronized(this) {
id = this.TICKET_ID_SEQUENCE++;
this.ticketDatabase.put(id, ticket);
}
Я тут всяких видео насмотрелся и начал задумываться о том, что поле TICKET_ID_SEQUENCE не обязано быть volatile, т.к. synchronized(this) хватит для того, чтобы выстроить очередь операций так, как нам нужно. Гугл тоже говорит, что volatile тут лишнее.
Я прав, или я чего-то не учитываю?
И вообще, если бы, допустим, не было synchronized, то volatile ведь всё равно не спасло бы, т.к. его инкремент не атомарный?