의 지속성 로더를 동기화 :<code>PersistenceController</code> 클래스에서 나는 다음과 같은 방법으로 지속성 항목에서로드하기위한 클래스가 자바
Item loadItem(int id);
을 그래서 지금은 다른 컨트롤러에서 다음과 같은 방법을 구현하려는 :
synchronized Item getItem(int id){
Item result= getItemFromMemory(id);
if (result==null){
result=PersistenceController.loadItem(id);
}
return result;
}
을
목표는 동시에 동일한 ID의 항목 인스턴스를 하나만 (또는 0) 확보하는 것입니다. 이 방법은 효과가 있지만 한 가지 문제가 있습니다. 모든로드 항목은 서로를 기다려야합니다. 둘 다 동일한 ID를 가지고있는 경우에만 다른 호출 대기를 위해 동기화 체계를 변경하고 싶습니다.
가장 좋은 방법은 무엇입니까?
그러면 ID를 잠궈 야합니다. 이 대답을 참조하십시오 [1] : http://stackoverflow.com/questions/659915/synchronizing-on-an-integer-value – MLN
귀하의 ID는 실제로 int 프리미티브로 표시됩니까? id 클래스에 객체를 사용하는 경우 getItem 메소드를 동기화하는 대신 ID 객체 자체에서 동기화 할 수 있습니다. – Luhar
정수에서 뮤텍스를 가져올 수 있는지 알지 못했습니다. 그것에 대해 질문이 있습니까? 프로그램의 다른 부분에서 같은 기술 (다른 무관 한 작업을 위해)을 사용하고 ID가 충돌하면 어떨까요? 이것은 잘못된 대기로 끝날 수 있습니까? 나는 잠금을 처리하기 위해 SparseArray