Volatile и synchronized в Java отличаются по своему назначению и области применения. 4
Volatile используется для переменных. 34 Модификатор volatile обеспечивает видимость данных: при обращении к переменной любой поток получит её последнее записанное значение. 1 Также volatile исключает кэширование значений переменной и хранит их только в основной памяти. 1
Synchronized применяется к методам и произвольным блокам кода. 14 Модификатор synchronized исключает доступ второго и последующих потоков к данным, с которыми уже работает один поток. 1 Он обеспечивает доступ только одного потока к методу или блоку единовременно, а также гарантирует, что операции внутри блока или метода будут выполнены полностью, либо не выполнены вовсе. 1