JVM이이 링크에 따라 공유 변수의 데이터를 주 메모리에서 스레드의 작업 메모리로 복사하여 동기화를 수행한다는 것을 읽었습니다.메모리 모델에서 자바 동기화
예를 들어, 같은 클래스가있다. 이 테스트 클래스가 여러 스레드에서 실행되고 "print2"방법은 하나 개의 스레드에서 실행되는 경우
class Test {
private Test2 test2 = new Test2();
public void print1() {}
public synchronized void print2() {
test2.print();
}
}
, 나는 시험에 대한 잠금이 하나 개의 스레드와 다른 스레드에 의해 인수되는 것을 기다릴 필요가 생각 자물쇠가 풀릴 때까지
이제 질문이 있습니다. Test에 대한 잠금이 Thread에 의해 획득되면 Test와 Test2의 데이터가 주 메모리에서 스레드의 작업 메모리로 복사된다는 의미입니까? 내가 말하고있는 이유는 "synchronized"키워드가 인스턴스 메소드 레벨에서 사용되고 test2가 Test 클래스의 인스턴스 변수라는 것입니다.
주 메모리에서 스레드의 작업 메모리로 복사되는 내용을 명확하게하려고합니다.
내가 잘못하면 저를 교정하십시오.
메서드 수준에서 "synchronized"를 사용하는 대신 synchronized 블록을 사용하면 어떻게됩니까? 개체 잠금 = 새 개체(); – user826323
@ user826323이 질문에 대답 할 수 있도록 내 기억을 새롭게해야했습니다. 내 업데이트 답변을 참조하십시오. 모든 공유 변수는 잠금을 사용할 때 주 메모리에서 가져옵니다. – Bryan