簡體   English   中英

ConcurrentHashMap值迭代器可以返回null

[英]ConcurrentHashMap value iterator can it return null

我正在嘗試理解ConcurrentHashMap的迭代器代碼,並且基於查看代碼,似乎ConcurrentHashMap#values()#iterator可能返回null值。

我相信這可能會發生,因為即使您無法添加空值,對remove的調用也會首先將值標記為null。

這是真的還是迭代器有辦法解決這個問題?

看看如何實現get() ,似乎ConcuurrentHashMap被編碼為允許由於類初始化競爭而導致條目值為null的情況(然后通過調用Segment.readValueUnderLock()來處理它。值迭代器以往任何時候都檢查值項null ,這樣看來,你有一個有效的問題(我不知道是否有一些其他揮發性操作該迭代過程中會發生哪些會改變這種可能性)。

但是,在Segment.readValueUnderLock()方法上有這個javadoc注釋:

讀取鎖定條目的值字段。 如果值字段似乎為空,則調用。 只有當編譯器碰巧使用其表分配重新排序HashEntry初始化時才有可能,這在內存模型下是合法的, 但是不知道會發生什么。

(最后強調我的)。

對Doug Lea來說可能是一個很好的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM