- 262 名前:170 mailto:sage [2008/05/18(日) 00:51:41 ]
- レスどうもありがとうございます。
>>259 なるほど、 CopyOnWriteArrayList の仕組みとメリットが理解できました。 ということは、あるスレッド(A)が CopyOnWriteArrayList#iterator で iteratorを取得し、それをずーっと保持するとしたら、別スレッド(B)が add() しても、 スレッド(A)が保持する iterator の中身は、スレッド(B)が add() する前の List の内容の 参照を持っているわけですね。なんか DB の分離レベルの話みたいだな。 >>260 Map ですが、実際の現場では Map オブジェクトをそのまま外部にさらすことは無いと思いますが、 (map = null で消されたらお終いだし) ・ラップするクラスを作り、map は private にする ・ラップするクラスには、put と get のメソッドを作る このとき、map の実装を ・Hashtable にすると、get もロックがかかるので、 ・HashMap にしておき、ラッパクラスの put メソッドは、内部で synchronized (myMap) { } ブロックで囲み、 get メソッドは synchronized をつけなければ、取得時の同時並行性は確保できると思いました。 ・でもこの場合、Map の実装を ConcurrentHashMap にして、put メソッドの synchronized を はずしても同じなのでは、と考えました。 多分その先は Java並行処理プログラミング を読め、って感じだと思うので、読んでみる事にします。 新APIとは、J2SE5 で導入された、java.util.concurrent.* のことですか?
|

|