2011-12-28 7 views
0

을 개발합니다. 작업을해야합니다 그 스레드는 다음과 같습니다보면 나는 다음과 같은 문제에 대한 해결책을 찾고 뮤텍스

  1. 으로 반복을 :이지도를 반복 실 것입니다 반복하는 동안, 그것은 일부 항목의 값을 읽고 업데이트합니다
  2. 넣어 :에 항목을 추가 할 스레드 중 하나 지도
  3. GET : 하나 개 이상의 스레드가지도를 읽을 정기적으로

어려운 부분은 반복 처리가 원인이되는, 얻을 넣어 호출 때문에, 3 방법에 뮤텍스를 넣을 수 없다 죽은 자물쇠.

클래스와 뮤텍스를 어떻게 디자인하면 좋을까요?

감사

+0

뮤텍스 (숙제의 경우)를 사용할 필요가없는 경우 java.util.concurrent의 클래스 (예 : ConcurrentHashMap)를 사용하는 것이 좋습니다. ConcurrentHashMap은 이터레이터를 올바르게 처리합니다. – toto2

답변

1

을 고양이를 피부에 더 많은 방법이 있습니다 synchronized 키워드를 사용할 때 획득 한 뮤텍스는 재진입 성이 있으므로 반복이 이미 뮤텍스를 소유하고 있다면 get 및 put을 호출 할 때 동일하게 다시 획득 할 수 있습니다.

즉, ConcurrentHashMap으로지도 회원 필드를 만들겠다고 말했습니다. 그런 다음 iterateConcurrentModificationException 문제가 없습니다 (자세한 내용은 ConcurrentHashMap 클래스의 javadocs 참조). 마찬가지로 getput에 대한 잠금은 ConcurrentHashMap에 의해 처리됩니다.

1

반복,에서 보호되지 않은 개인 GET/풋 방법을 사용되는 고전 하나가 대중의 get/set 메소드 잠금 뮤텍스에 그 포장

관련 문제