2016-12-26 1 views
1

스프링 기반 Java 응용 프로그램을 사용하고 있으며 성능 목표로 메모리에 많은 객체를 캐시하고 데이터에서 해당 캐시를 업데이트하는 것이 스케줄 된 작업입니다. 소스를 정기적으로.예약 된 작업에서 런타임시 setter를 통해 싱글 톤의 종속성을 안전하게 업데이트합니다.

싱글 톤 스프링 빈에 해당 맵을 저장하는 경우 런타임에 액세스/서비스 메서드를 동기화하지 않고 해당 맵을 업데이트하는 스레드 안전 방법이 있습니까? setMap(myNewMap)을 호출하는 동안 싱글 톤 객체에서 동기가 아닌 메서드의 임시 블록을 수행 할 수 있습니까? 그게 필요 할까? 이 특정한 목적을 위해

class MySingletonCache { 

    private Map<String, Object> myMap; 

    // Called periodically from scheduled job 
    public void setMap(Map<String, Object> myMap) { 
    this.myMap = myMap; 
    } 

    // High concurrency, cannot make this synchronous 
    public Object findById(String id) { 
    return this.myMap.get(id); 
    } 

} 

답변

관련 문제