방금 Java 6 API에서이 데이터 구조를 보았고 언제 유용한 리소스가 될지 궁금합니다. 나는 scjp 시험을 위해 공부하고 있으며 그것을 언급하는 모의 시험 문제를 보았음에도 불구하고 Kathy Sierra의 책에서 다루지 않았습니다.
방금 Java 6 API에서이 데이터 구조를 보았고 언제 유용한 리소스가 될지 궁금합니다. 나는 scjp 시험을 위해 공부하고 있으며 그것을 언급하는 모의 시험 문제를 보았음에도 불구하고 Kathy Sierra의 책에서 다루지 않았습니다.
답변:
ConcurrentSkipListSet 및 ConcurrentSkipListMap 은 여러 스레드에서 액세스 할 정렬 된 컨테이너가 필요할 때 유용합니다. 이들은 본질적으로 동시 코드에 대한 TreeMap 및 TreeSet과 동일합니다.
JDK 6의 구현 은 IBM의 Maged Michael이 작성한 고성능 동적 잠금 해시 테이블 및 목록 기반 세트 를 기반 으로 합니다. 이는 CAS (비교 및 스왑) 작업을 사용하여 건너 뛰기 목록에서 많은 작업을 원자 적으로 구현할 수 있음을 보여줍니다 . 잠금이 없으므로 synchronized
이러한 클래스를 사용할 때 (대부분의 작업에서) 오버 헤드에 대해 걱정할 필요가 없습니다 .
현재 Java 에는 Red-Black 트리 기반의 동시 Map / Set 구현이 없습니다. 문헌을 조금 살펴본 결과 동시 RB 트리가 건너 뛰기 목록을 능가하는 성능을 보여주는 몇 개의 논문 을 찾았 지만, 이러한 테스트 중 상당수 는 현재 주요 아키텍처의 하드웨어에서 지원되지 않는 트랜잭션 메모리 로 수행되었습니다 .
구현이 잘 알려져 있고 잠금 해제가 간단하고 이식 가능하기 때문에 (CAS 사용) JDK 사람들이 여기에 스킵 목록을 사용했다고 가정하고 있습니다. 누구든지 명확하게 관심이 있다면 그렇게하십시오. 궁금해.