Я прочитал, что JVM осуществляет синхронизацию, копируя данные общей переменной из основной памяти в рабочую память потока по этой ссылке.
введите описание ссылки здесь
например, есть такой класс.
class Test {
private Test2 test2 = new Test2();
public void print1() {}
public synchronized void print2() {
test2.print();
}
}
Если этоТестовый класс выполняется в нескольких потоках, а метод "print2" выполняется в одном потоке, я думаю, что блокировка на Test получена одним потоком, а другие потоки должны ждать, пока блокировка не будет снята.
Теперь у меня есть вопрос.Если Поток получает блокировку Test, означает ли это, что данные Test и Test2 копируются из основной памяти в рабочую память потока?Причина, по которой я говорю, состоит в том, что ключевое слово «synchronized» используется на уровне метода экземпляра, а test2 является переменной экземпляра класса Test.
Я просто пытаюсь уточнить, что копируется из основной памяти в рабочую память потока.
Пожалуйста, исправьте меня, если я ошибаюсь.