2017-09-24 14 views
1

I'am는 : ChronicleMap 및 parallelStream

myChronicleMap.entrySet().parallelStream().forEach((entry) -> { 
    process(entry); //heavy process 
} 

나는 다음과 같은 예외를 얻었다.

java.lang.IllegalStateException : ChronicleMap ... 반복자는 단일 스레드

chronicleMap 및 parallelStream을 사용하는 방법 어떤 생각에서만 접근해야 하는가? 감사합니다.

+0

우선, 이는 병렬 스트림이 아닙니다. –

답변

1

크로니클이 병렬 스트림을 지원하지 않으면 해당 내용을지도 구현으로 복사해야합니다.

Map<?, ?> mapCopy = myChronicleMap.entrySet() 
            .stream() 
            .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); 
mapCopy.entrySet().parallelStream().forEach(this::process); 
+1

성능이 좋은 힙 맵이 필요하므로 크로니클 맵을 사용하고 있습니다. https://github.com/OpenHFT/Chronicle-Map – kem

+2

글쎄, 세 가지 옵션이 있습니다. 첫 번째 옵션은 병렬 스트림을 지원하는지도 유형으로 복사하는 것입니다. 두 번째 옵션은 병렬 스트림을 완전히 잊어 버리고 표준 실행 프로그램 서비스로 되돌아가는 것입니다. 세 번째 옵션은 병렬 스트림을 지원할 수 있도록 OpenHFT에 기여하는 것입니다. –