String 값을 보유하고 이미 존재하지 않는 요소를 추가하는 메소드를 동기화 한 Java 컬렉션이 필요합니다 (addIfAbsent은 ArrayList 용입니다). 수집량이 많은 트래픽이 발생합니다. 또한 컬렉션에서 항목이 만료 된 후 일부 시간 초과 메커니즘을 갖고 싶습니다. 제한 시간은 약 5 초 여야합니다.시간 초과가있는 자바 동시 설정
우아한 해결책에 대한 제안이 있으십니까? 타임 아웃 메커니즘이없는 컬렉션을 선택하는 것도 도움이 될 것입니다.
도움 주셔서 감사합니다.
구아바 캐시 나를 위해 트릭을 할 것 인 무엇인가 같습니다
,이 스레드에서 봐 주시기 바랍니다. 내가 질문하지 않은 한 가지는'cache.get (...) '을 호출 할 때 키가 이미 캐시에 존재했는지를 알아야한다는 것입니다. 정확히 말하면 캐시에있는 키의 이전 존재에 대한 반환 정보가 있으면 원자 놔두 기가 필요합니다. 내가 찾은 유일한 해결책은 캐시를지도로 사용하는 것입니다 : 'value = cache.asMap(). putIfAbsent (key, value)' 그런 식으로 저는 Guava 자체 로딩 작업을 잃어 버렸지 만, 타임 아웃 메커니즘을 사용합니다. 그것에 대해 어떻게 생각하세요? – njosa
@njosa : 정보가 필요하다면 "전에 삽입 했었지만 전에는 없었습니다"라고 말하면 다른 선택의 여지가 없을 것입니다. 나중에 값이 요구되었을 때 그 값이 실제로 맵에 있는지 확인하고 싶다면'cache.get (String, Callable) '메소드가 더 좋다. 'Callable' 함수가 호출되어 요청시와 없을 때 값을 생성합니다. 따라서 발신자에게는 투명합니다. 항목이 현재 존재하는지 여부에 대한 정보가 필요하다면'getIfPresent()'가 도움이 될 수 있습니다. – Stephan