同期コレクション 同期コレクションのイテレーション 同期コレクションのプット・イフ・アブセント 並列コレクション ConcurrentHashMap CopyOnWriteArrayList CopyOnWriteArraySet 同期コレクション 同期コレクションは、JDK1.2以降で追加された Collections.synchronizedXxx 系のファクトリメソッドから同期ラッパークラスを作成します。 List<String> list = Collections.synchronizedList(new ArrayList<String>()); Set<String> s = Collections.synchronizedSet(new HashSet<String>()); Map<Long, String> m = Collections.synchronizedMap
「HashMapのputとgetを同時に行うと、無限ループが発生する」という事は Javaエンジニアな皆さんならご存知だと思います。 1. 無限ループの再現 まずは論より証拠、無限ループになることを確認してみましょう。 こんなテストコードを書けば、すぐに再現できます。 public void testHashMap_無限ループ() throws InterruptedException { final Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Runnable runnable = new Runnable() { public void run() { for (int i = 0; i < 1000000; i++) { int key = i % 10000; if (map.containsKey(ke
前のエントリで激しい議論が続いていますが、置いてきぼりをくらって バーカンウターで退屈そうにしていらっしゃるお客様のために、基礎講座を。 synchronizedの基本 同時に複数の人が編集作業をすると、あっというまにぐちゃぐちゃになってしまいます。 さっきまで10と書いてあったから、そこに1を足して11を書き込もう、としたらすでに値が12になっていた…。 そこでまぁいいや、と11と書き込むと、最後になって数字の辻褄があわなかったりするわけです。 マルチスレッドでの同期の問題のひとつはここにあります。 a += 1; という単純な式でさえ、実際にはaを読み出し、1を足し、格納するというステップから成っています。 その間に他のスレッドに読み出され、別の値を格納されたりするわけです。 「1度にいじるのはひとりだけにしてくれ!」そういいたくなりますね。たとえばここに、ボールをひとつ用意します。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く