2017-09-24 3 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

さて、3つの選択肢があります。最初のオプションは、パラレルストリームをサポートするマップタイプにコピーすることです。 2つ目の選択肢は、パラレルストリームを完全に忘れて、標準のエグゼキュータサービスにフォールバックすることです。第3の選択肢は、OpenHFTが並列ストリームをサポートできるようにすることです。 –

関連する問題