ПМСМ, atomic - это дополнение к volatile, но не замена. Могу ошибаться, но всегда думал, что atomic - это способ доступа к неатомарному объекту, гарантирующий отсутствие изменений частей объекта другими процессами в момент доступа.
При этом, atomic делает безопасным чтение и запись объекта, но не обязывает компилятор производить эти действия. Другими словами, если доступ к переменной атомарный, компилятор может не выполнить обращение при упоминании переменной в коде, если она не имеет модификатора volatile.