나는 Map
(또는 컬렉션) 항목에 대해 타임 - 투 - 아이들을 지원하고 자동으로 제거해야합니다.지도
나는 구아바 MapMaker
가 알고 있지만 실행중인 스레드에 의해, 오히려 자동보다는 이후의 읽기/쓰기 작업에 요소를 만료됩니다. 또한 MapMaker
의 만료 기능이 CacheBuilder
으로 이동되었습니다. 뭔가가 바로 사용할 수 있습니까 만료되는 요소
합니다 - 문제는 내가 캐시를하지 않으입니까? (직접 구현하는 것이 어렵지 않지만 재사용하는 것이 더 낫습니다.)
는 "다이"어떻게 든 명시 적으로 요소가 필요하십니까 시간에 (예를 들어, 일부 메서드를 호출하여)? 만료 된 요소를 버리면 액세스 시간에 요소의 시간 소인을 확인하면 충분합니다. – 9000
실행중인 스레드가 주기적으로 Cache.cleanup()을 호출하여 만료 된 항목의 제거를 트리거 할 수 있습니다. 즉각적인 것은 아니지만, 실행중인 스레드는 내부적으로 너무 많은 제한 사항 (J2EE/GAE 호환이 아니고, 도그 효과 (dogpile effect) 등으로 고통 받음)이있었습니다. –
@Ben Manes가 제안에 감사드립니다. 그러나 캐시 인터페이스가 마음에 들지 않습니다. 첫째, 값 계산을 지정해야합니다. 나는 그것을 필요로하지 않는다. null을 반환하면 NPE가 throw됩니다. 그것은 항상 getOrCompute를 호출하고 있기 때문에 그것이 필요합니다 - 그냥 간단한지도처럼. 그런 다음 NPE를 잡아도 작동 할 수는 없지만 (아마도 내 잘못) 액세스 한 경우에도 항상 항목이 만료되었습니다. – Bozho