2014-05-13 1 views
1

프로그램에서 스프링 IoC에서 생성되는 싱글 톤 해시 맵을 다른 스레드간에 공유 자원으로 사용할 계획이지만이 인스턴스를 재생성하지 않아야합니다. 그렇지 않으면 잃어 버릴 수 있습니다. 캐싱 된 데이터. 나는 그것에 의지 할 수 있습니까?싱글 톤 인스턴스를 공유 리소스로 사용할 수 있습니까?

default-lazy-init="true" 

<util:map id="sharedResource" map-class="java.util.HashMap" key-type="KeyClass" value-type="ValueClass"/> 
+2

봄은 하나의 인스턴스 만 초기화합니다. 문제가 뭔데? – Lokesh

+0

기본적으로 싱글 톤이 될 것이지만 이것은 쓰레드에 안전하지 않을 것입니다. –

+0

@Lokesh 저는 이것이 단일 인스턴스라는 것을 알고 있지만 보장 되었습니까? –

답변

1

스프링 빈은 기본적으로 싱글 톤이므로 사용자가 좋습니다. 그러나 둘 이상의 스레드가 사용하는 해시 맵에 대한 스레드 안전성은 보장되지 않습니다. ConcurrentHashMap을 맵 클래스로 사용하여이를 극복 할 수 있습니다.

나는 이것이 제 생각에 기본적인 캐싱 전략이라고 생각합니다. 그것이 당신의 목적에 부합한다면 그것은 위대합니다. 보다 정교한 캐싱 전략이 필요하면 Ehcache 또는 Memchached를 살펴보십시오.

0

이 스프링 애플리케이션 컨텍스트 당 싱글 인스턴스를 생성한다. 또한 모든 모듈이 동일한 스프링 컨텍스트를 공유하는지 확인해야합니다. 다른 모듈이 자신의 컨텍스트를로드하면, 싱글 톤 인스턴스를 포함하여 파일에있는 모든 인스턴스의 전체 복사본을 얻게됩니다.

스프링 컨텍스트의 라이프 사이클을 생성하고 관리 할 수있는 중앙 집중식 장소가 있는지 확인하십시오.

관련 문제