2016-06-16 1 views
-3

JVM이 값을 캐싱하지 못하도록 클래스 필드에 volatile을 사용해야한다는 것을 이해합니다. 그러면 읽을 때 항상 최신 값이됩니다.필드를 언제 "휘발성"으로 정의해야합니까? 언제 불필요한가요?

제 이해가 정확하다면 다중 스레드 스레드 환경에서 작업 할 때 volatile으로 모든 필드를 정의해야한다는 뜻은 아닙니까? 필드를 volatile으로 정의 할 필요가 언제 있습니까?

+0

* 우리는 모든 필드를 휘발성으로 정의해야합니다. * 모든 객체의 모든 필드를 정의해야합니까? 다중 동시 스레드에 액세스 할 수있는 필드 만 가능합니다. – shmosel

+0

volatile은 JVM이 변수와 관련된 코드를 최적화하는 것을 방지합니다. 모든 필드를 휘발성으로 정의하면 많은 성능을 잃게됩니다. –

답변

0

volatile 필드는 동기화를 제공하는 다른 메커니즘 (예 : lock)없이 여러 스레드에서 액세스하지 않을 경우 정의 할 필요가 없습니다.

클래스의 모든 구성원이 액세스 할 수있는 경우 모든 필드를 반드시 표시해야합니다.

+0

@meriton 좋은 지적! 내 편집이 그것을 수정합니까? –

관련 문제