Каждый поток имеет кэш основной памяти.
Поле может быть объявлено как volatile, и в этом случае Java Memory Model гарантирует, что все потоки увидят согласованное значение для переменной
Например, у нас есть этот статический счетчикэто не потокобезопасно
static int counter = 0;
Если два потока читают и записывают эту переменную, это будет выглядеть так:
Main memory - > static int counter
T1-> Cache of the Main Memory. Reads/Writes directly from Cache
T2-> Cache of the Main Memory. Reads/Writes directly from Cache
Так что это будет противоречиво при чтении и записи.
static volatile int counter = 0;
Main Memory - > static int counter;
T1 - > Read and Writes directly from the memory
T2 - > Read and Writes directly from the memory
Я надеюсь дать вам простое резюме по этому поводу.Потому что вам нужно проверить больше о параллелизме и Атомный доступ для параллелизма переменных. Проверьте больше в Java Docs