2012-03-22 4 views
1

java.util.concurrent.ConcurrentSkipListSet을 사용하는 일부 코드를이 클래스를 사용할 수없는 환경 (특히 android 2.2)으로 이식하는 방법을 찾고 있습니다. 그러므로 나는 그것에 대한 대안을 찾고있다. (I 높은 통화량을 가지고 있지 않기 때문에 잠금 가능)java.util.concurrent.ConcurrentSkipListSet에 대한 대안

  • 기본 '설정'실시 (필요하지 않은 해 NavigableSet 또는 이와 유사한 것)
  • 표준 작업 스레드 안전해야
  • : 내 요구 사항은
  • 반복자가 remove() 작업을

어떤 아이디어를 지원해야 해, ConcurrentModificationException

  • 반복자를 포기하지해야합니까?

  • +0

    ConcurrentSkipListSet의 소스를 복사하고 Android 2.2에서 작동하는지 확인해 보셨습니까? 거기에서 일하는 concurreny 클래스의 JDK5 기초를 가지고 있습니까? – Thilo

    +0

    ConcurrentSkipListSet은 다른 java.util.concurrent 클래스의 package-private 메소드를 사용하는 것처럼 보이므로이 방법을 사용할 수는 있지만 작업이 될 수 있습니다. 내가 얼마나 많은 수업을 끝내야하는지 모릅니다. 거기에 대체 구현이 있었으면 좋겠지 만 그렇지 않은 경우 이것이 최선의 방법이라고 생각합니다. – Jules

    +0

    ConcurrentSkipListSet의 소스를 살펴보면 이전에 알아 차릴 수 있었던 것을 상기 시켰지만 HashSet (http://kickjava.com/src/java/util/HashSet.java.htm)의 소스는 매우 간단하며 HashMap은 모든 작업을 수행합니다. 나는 이것을 복사하고 ConcurrentHashMap을 대체하면 내가 원하는 것을 할 수 있을까? – Jules

    답변

    2

    a backport of java.util.concurrent for JDK 1.3 and above 있습니다. ConcurrentSkipListSet을 포함합니다. 시도 해봐. JDK 5 용 버전을 원할 것입니다.

    +0

    유용합니다. 그리고 만약 내 자신의 솔루션을 구현하기 전에 그것을 본 적이 있다면 (원래의 질문에 대한 의견에 따라) 나는 지금 그것을 사용하고있을 것이다! – Jules

    -1

    사용하십시오 HashSet의 :

    Set s = Collections.synchronizedSet(new HashSet(...)); 
    

    들에 동기화하고 반복자는() 제거 작업을 사용하여 이외의 방법으로 설정을 수정하지 않는 한이 오래 작동합니다.

    Collections.synchronizedSet

    +0

    다른 스레드가 항목을 동시에 추가하는 동안 한 스레드가 집합의 내용을 반복하므로이 기능이 작동하지 않습니다. – Jules

    +0

    하지만 당신은 잠글 수 있다고 말했다! : pj/k. 이 경우 Thilo의 추천을 시도해보십시오. – Drew