0
我跑進其中HashSet
是在同一時間訪問和修改由多個線程一些陰暗的一段代碼,我想知道是什麼效果,這可能不得不考慮的Javadoc只在併發,非同步訪問下解釋行爲是「非確定性」的。影響
具體而言,是有可能,以remove(element)
回報true
一個電話,但電話的作用不會被其他線程見過(即contains(element)
總會在其他線程返回true
)?
PS:只是向你保證,我知道這個代碼是壞的,我會用等效同步採集更換HashSet
。
謝謝您的回答@Peter!你能爲我澄清一些事嗎?當你說「一個變化不被另一個線程看到」時,它是否認爲這個變化最終會被看到,或者一個(或多個)線程可能會無限期地拋棄一個變化的影響? – ahelix
我通常假設爲併發的神恨我們,最壞的事情都可能發生 –
@ahelix有根本沒有保障經驗法則。結果絕對不會被丟棄,但可見性可能無限期地推遲。更糟的是,各種單獨的修改可能在不同的時間可見,導致完全破壞的HashSet對象。 –