0

これで、words という HashMap と、Thread クラスを拡張する Producer クラスができました。

そして、私はそのようなforループを持っています:

for (int i = 0; i < 10; i++) {
  Producer producer = new Producer(i);
  producer.run();
}

各プロデューサーにいくつかの単語を HashMap の単語に追加させたいと考えています。for (int....) ステートメントについて HashMap<...> の単語を入れるだけで機能しますか?

そうではありません。これを達成するにはどうすればよいですか?

4

2 に答える 2

0

ConcurrentHashMap は HashMap クラスに非常に似ていますが、ConcurrentHashMap は内部で維持される並行性を提供する点が異なります。これは、マルチスレッド アプリケーションで ConcurrentHashMap にアクセスするときに、ブロックを同期する必要がないことを意味します。

//Initialize ConcurrentHashMap instance
ConcurrentHashMap<String, Integer> m = new ConcurrentHashMap<String, Integer>();

//Print all values stored in ConcurrentHashMap instance
for each (Entry<String, Integer> e : m.entrySet())
{
system.out.println(e.getKey()+"="+e.getValue());
}

上記のコードは、アプリケーションのマルチスレッド環境で妥当に有効です。私が「合理的に有効」と言っている理由は、上記のコードはスレッド セーフを提供しますが、それでもアプリケーションのパフォーマンスを低下させる可能性があるからです。また、ConcurrentHashMap は、スレッド セーフを確保しながらパフォーマンスを向上させるために導入されました。

パフォーマンスを向上させるために、必要に応じて次のパラメーターを調整できます。

  • 初期容量

  • 負荷率

  • 同時実行レベル
于 2013-07-19T05:26:00.137 に答える