클래스 필드를 만들면 이 발생하지 않습니다. 동시 발생 상황에서 메모리 가시성 문제가 있습니까? 아래 클래스의 경우 Test
개체의 참조를 가져 오는 스레드가 을 먼저 0 (기본값은 int
)으로보고 10을 볼 수 있습니까? 가능한 경우 이라고 생각하고 있습니다. Test
의 생성자이 완료되지 않은 경우 (부적절한 게시) this
참조를 제공하는 경우에만 해당합니다. 누군가가 나를 검증/교정 할 수 있습니까?'volatile'필드를 사용하면 동시 발생 상황에서 모든 메모리 가시성 문제를 방지 할 수 있습니까?
class Test {
volatile int x = 10;
}
두 번째 질문 : final int x=10;
은 무엇 이었습니까?
첫 번째 코드 스 니펫을 참조하면 'test'라는 참조가 'final'으로 선언되면 다음과 같이됩니다. 'test! = null'이 참이라면 Thread 2는'test.x'를 10으로 보게됩니다. – Bhaskar
그러나 명확히하기 위해'x'가 마지막으로 thread-2가'x == 10'을 읽으면'y == 3'을 읽어야한다는 보장을 잃게됩니다. – yshavit
@Bhaskar 네,'this'가'Test'의 생성자에서 유출되지 않는 한. '누설 '이라면 모든 내기가 꺼져 있습니다. – yshavit