[SPRING] ConcurentHashMap과 AtomicInteger를 스프링 서비스 클래스 내의 인스턴스 변수로 사용하기
SPRINGConcurentHashMap과 AtomicInteger를 스프링 서비스 클래스 내의 인스턴스 변수로 사용하기
컨트롤러에 주입 된 싱글 톤 스프링 서비스 내에서 ConcurentHashMap의 스레드 안전 사용법을 구현하려고합니다.
@Service
public MyService{
final ConcurrentMap<String, AtomicInteger> myMap = new ConcurrentHashMap<String, AtomicInteger>(10) {
{/* initialize the ten key/values */
}
};
public int add(String key) {
return myMap.get(key).incrementAndGet();
}
// accessed via ajax loop (and controller), if value changes update display
public int getCount(String key) {
return myMap.get(key).get();
}
}
thread-safe 해시 맵에 액세스하는 더 좋은 방법이 있습니까? 클러스터 환경에서이 작업을 어떻게 적용 할 수 있습니까? 그것은 내 다른 질문에 대한 내용이다.
해결법
-
==============================
1.나는 esp에 대한 해답을 얻는 것을 목표로하지 않는다. 나는 군집 된 상황에 대한 전문 지식이 없기 때문에; 그러나 나는 주목할 가치가 있다고 생각하는 것을 지적하고자한다.
나는 esp에 대한 해답을 얻는 것을 목표로하지 않는다. 나는 군집 된 상황에 대한 전문 지식이 없기 때문에; 그러나 나는 주목할 가치가 있다고 생각하는 것을 지적하고자한다.
주석 중 하나 인 @JB Nizet은 코드가 스레드로부터 안전하고 정확하다는 점을 언급합니다. Java API Reference를 기반으로 일관성이 없지만 추가하고 싶습니다.
일부 업데이트가 현재 실행 중일 때 클라이언트가이 정보를 얻을 수 있음을 의미합니다. 그리고 그것은 여러분의 코드에서 '루핑'을 언급 한 이후로 의미가 있습니다. 그래서, 이것이 중요하지 않다면 모든 것이 잘되어야합니다.
하지만이 작업을 좀 더 엄격하게해야한다면 ReentrantReadWriteLock 인스턴스를 사용하는 것이 좋은 선택 일 것이라고 생각했습니다. 잠금을 사용하면 사용 가능한 정보의 일관된 스냅 샷이있을 때까지 코드가 모든 읽기 요청을 차단할 수 있습니다. add 메소드가 코드에서 사용 된 맵의 일관된 스냅 샷을 기다리는 모든 잠금을 해제 할 때까지 getCount 메소드의 잠금을 사용하여 엄격하게 차단할 수 있습니다.
또한 클러스터 된 솔루션으로 마이그레이션 할 때 동일한 관심사가 유효하다고 생각할 수 있습니다. 서로 다른 클러스터 노드간에 일관성이 요구되는 경우이를 처리해야합니다.
from https://stackoverflow.com/questions/11126684/using-concurenthashmap-and-atomicinteger-as-instance-variables-within-a-spring-s by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] spring 배치가있는 Json Array 판독기 파일 (0) | 2019.04.29 |
---|---|
[SPRING] ApplicationContextException : ServletWebServerFactory 빈이 없어서 ServletWebServerApplicationContext를 시작할 수 없습니다. (0) | 2019.04.29 |
[SPRING] Jar의 여러 XML 파일을 사용하는 Spring ApplicationContext (0) | 2019.04.29 |
[SPRING] @Transactional 메서드에서 Spring 내에서 트랜잭션이 시작되지 않습니다. (0) | 2019.04.29 |
[SPRING] WebMvcConfigurerAdapter가 작동하지 않습니다. (0) | 2019.04.29 |