私はArrayListの安全な出版に疑念を抱いています。j.u.c.ConcurrentHashMapを配置した後、ArrayListを安全に公開する予定ですか?
I有しコード:
private final Map<Long, SomeStuff> map = new ConcurrentHashMap<>();
//Called by Thread 1
public void write() {
List list = new ArrayList<>();
for (int i = 0; i <100 ; i++) {
list.add(new SomeStuff(i))
}
map.put(1L,list)
}
// Called by Thread 2
public void read() {
List list = map.get(1L);
}
ウィル正しい状態でmap.get(1L)の戻りのArrayListのivocation(正しいサイズたとえばを有しますか)?
ArrayListの要素はどうですか?要素は安全に公開されますか?
ConcurrentHashMap.put
がノードのロックによって保護されていることがわかりましたが、変更されますが、ConcurrentHashMap.get
はthrought Unsafe.getObjectVolatile
を実行します。
と私は、ArrayListのが危難に
感謝を発表するかもしれないと思います!
お返事ありがとうございます@Ruslan。 – BakomchevDmitriy