В Java, когда мы хотим убедиться, что компилятор не должен выполнять оптимизацию, сохраняя локальную копию переменной, мы делаем переменную volatile. Использование переменной как volatile гарантирует, что потоки не будут использовать локальную копию переменной, но они будут использовать переменную так, как она хранится в основной памяти. Но означает ли это, что переменная volatile является поточно-ориентированной? Кроме того, как это отличается в случае примитивного типа и в случае, если мы используем определенный пользователем объект?