내 응용 프로그램에서 값을 업데이트하려고 시도하고 있습니다.이 객체를 Foo 객체라고 부를 수 있습니다. Foo는 자바 객체로 변경할 수 없지만 Hibernate 엔티티를 통해 데이터베이스에서 업데이트 될 수 있습니다. 나는 존재하지 않을 때 데이터베이스에서 값을로드하는로드 캐시 오버레이 (Guava 캐시 구현)를 호출하여 Foo 객체에 액세스하고 있습니다. 또한 동시 쓰기가 가능하지만 쓰기는 거의 없지만 Foo 객체에 대한 읽기는 많습니다.캐시 된 Java 객체를 동시에 업데이트하는 방법
Foo 개체를 업데이트하는 가장 좋은 방법은 무엇입니까? 업데이트시 캐시 잠금? 다른 구조 설계?
광대 한 인터넷에서이 주제에 대한 정보가 분명히 있음을 유의하십시오. 그러나이 내용을 너무 많이 읽으므로 혼란스러워 보입니다. 현재 캐시 구현 클래스의 업데이트 메소드에 대해 ReentrantLock을 사용하고 있지만 더 좋은 방법이 있어야합니다.
"불변"개체가 변경되었음을 응용 프로그램의 여러 부분에서 알고 있어야합니까? –
@ ThorbjørnRavnAndersen, 아니, 다른 "작가"가 개체를 업데이트 할 때 경쟁 조건이 없도록 알아야하는 경우가 아니라면 그렇게 생각하지 않습니다. – oberger
일반적인 해결책은 객체가 업데이트 될 때 이벤트가 시작되도록하는 것입니다. 그렇게하려면 큰 코드베이스의 예를 보려면 스윙을 참조하십시오. 잠금과 동기화를 사용하여 업데이트가 중복되지 않도록 할 수 있습니다. –