programing

Java에서 최적의 동시 실행 목록 선택

kingscode 2022. 10. 10. 22:15
반응형

Java에서 최적의 동시 실행 목록 선택

내 스레드 풀에는 스레드 수가 고정되어 있습니다.이러한 스레드는 공유 목록에서 자주 쓰고 읽어야 합니다.

즉, 어떤 데이터 구조(리스트가 되는 것이 좋으며, 모니터가 필요합니까?java.util.concurrent이 경우 패키지가 가장 좋습니까?

하는 것이 좋다List

유일한 List에서의 실장java.util.concurrentCopy On Write Array List 입니다.트래비스 웹이 말한 것처럼 동기화된 리스트의 옵션도 있습니다.

단, 정말 필요한 것이 있습니까?List? 동시 실행에는 더 많은 옵션이 있습니다.QueueMaps(또,Set에서Maps) 그리고 이러한 구조는 공유 데이터 구조에서 수행하고자 하는 많은 유형의 작업에 가장 적합한 경향이 있습니다.

큐에는 다양한 옵션이 있으며 어떤 옵션이 가장 적합한지는 사용 방법에 따라 달라집니다.

Java 컬렉션은 다음과 같이 스레드 세이프 상태로 만들 수 있습니다.

List newList = Collections.synchronizedList(oldList);

또는 완전히 새로운 스레드 세이프 목록을 작성하려면:

List newList = Collections.synchronizedList(new ArrayList());

http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedList(java.util.List)

ConcurrentLinkedQueue 는 (새로운 CAS 명령에 따라) 잠금프리 큐를 사용합니다.

목록의 크기가 고정된 경우 AtomicReferenceArray를 사용할 수 있습니다.그러면 슬롯에 인덱스된 업데이트를 수행할 수 있습니다.필요한 경우 목록 보기를 작성할 수 있습니다.

Paul Martin의 "A Practical Lock-Free Doubly Linked List"를 바탕으로 Doug Lea가 작성한 Concurrent Doubly Linked List를 참조해 주십시오.java.util은 구현되지 않습니다.인터페이스를 나열하지만 목록에서 사용하는 대부분의 메서드를 제공합니다.

javadoc에 따르면:

Deque(더블 엔드 큐)의 동시 링크 리스트 실장.동시 삽입, 제거 및 액세스 작업은 여러 스레드에 걸쳐 안전하게 실행됩니다.반복기는 약하게 일관되며 반복기 생성 시점 또는 이후 어느 시점에서 디큐 상태를 반영하는 요소를 반환합니다.Concurrent Modification은 슬로우하지 않습니다.예외이며 다른 작업과 동시에 진행할 수 있습니다.

설정이 충분한 경우 ConcurrentSkipListSet을 사용할 수 있습니다.(이 실장은 건너뛰기 목록을 구현하는 ConcurrentSkipListMap을 기반으로 합니다).

포함, 추가 및 제거 작업의 예상 평균 시간 비용은 log(n)입니다. 크기 지정 방식은 고정 시간 작업이 아닙니다.

언급URL : https://stackoverflow.com/questions/8203864/choosing-the-best-concurrency-list-in-java

반응형