2015-01-10 2 views
2

여기에 자바 EE 튜토리얼에서 싱글 세션 빈의 예는 다음과 같습니다 것이 가능 어떻게Java EE 싱글 톤 세션 빈의 필드가 휘발성 일 필요가없는 이유는 무엇입니까?

@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER) 
@Singleton 
public class ExampleSingletonBean { 

    private String state; 

    @Lock(LockType.READ) 
    public String getState() { 
     return state; 
    } 

    @Lock(LockType.WRITE) 
    public void setState(String newState) { 
     state = newState; 
    } 
} 

private String state 필드가 휘발성 될 필요가 없다는 점은? 애플리케이션 서버가이 참조가 서로 다른 동시 HTTP 요청에 대해 로컬 스레드로 캐시되지 않도록 보장 할 수있는 방법은 무엇입니까?

답변

0

here과 같이 CONTAINER을 사용할 경우 Lock이 사용됩니다. here를 판독 할 수

이제 로크 자체 든 volatile 에뮬레이트

모든 Lock 구현은 동일한 메모리 동기화 의미 을 적용해야 의해 제공되는 내장 모니터 잠금에 기재된 자바 언어 스펙, 제 3 판 (17.4 메모리 모델) :

  • succe ssful lock 작업은 과 동일한 메모리 동기화 효과가 Lock 동작으로 성공했습니다.
  • 성공적인 unlock 작업은 동기화 작업이 성공 Unlock 동작으로 동일한 메모리를가집니다. 즉

암시 잠금이 "휘발성"입니다 (키워드로 반드시 아마도,하지만 구현).

관련 문제