を行うとき、私はチュートリアルを以下だと、それは基本的にマルチスレッド環境でハッシュマップのサイズを変更する場合に発生する競合状態の原因について説明します。同じ2つのスレッド場合、JavaではHashMapのリサイズ
HashMapのサイズを変更する必要があり、サイズを変更しようとしています。 JavaのHashMapのサイズ変更のプロセスでは、リンクされたリストに格納されているバケットの要素は、新しいバケットへの移行中に順番に逆順になります。java HashMapは新しい要素を末尾に追加するのではなく、テールトラバースを避ける。競合状態が発生した場合、あなたは無限ループ
で終わるだろう、私はこれを読んだ後に二つの質問があります。
- をなぜ各バケットのリンクリストは、順番に逆転されていますか?
- 競合状態があるかもしれませんが、無限ループがどのように起こっているのか分かりません。それは、一方のスレッドが要素の先頭を末尾に追加し、他方のスレッドは逆の順序でそれを行うためですか?
これを明確にするのを手伝ってください、非常に感謝します!
は、私はあなたの質問への答えを知らない - 私はちょうどあなたがスレッドセーフ[ConcurrentHashMapの](使用することをお勧めしたいですhttp://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html)を参照してください。 –
'HashMap'はスレッドセーフではありません。マルチスレッド環境で使用することは悪い考えです。別の方法で競争条件を取得します。 – gaborsch