簡體   English   中英

同時迭代HashMap對象是否是線程安全的?

[英]Is it thread-safe to iterate a HashMap object concurrently?

如果多個線程同時迭代HashMap對象而不修改它 ,那么競爭條件是否存在?

沒有競爭,如果你可以保證在迭代時沒有其他線程會修改這個HashMap。

不,那很好。 只要所有讀取與所有寫入同步,並且所有寫入彼此同步,並發讀取就沒有壞處; 因此,如果根本沒有寫入,則所有並發訪問都是安全的。

它會好起來的。 但是如果任何線程添加或刪除一個項,這將在任何其他只是迭代HashMap的線程中拋出異常(實際上是任何集合)

如果要重復迭代Map,可能會發現迭代數組副本的速度要快一些。

private final HashMap<String, String> properties = new HashMap<String, String>();
private volatile Map.Entry<String, String>[] propertyEntries = null;

private void updatePropertyEntries() {
    propertyEntries = properties.entrySet().toArray(new Map.Entry[properties.size()]);
}

{
    // no objects created
    for (Map.Entry<String, String> entry : propertyEntries) {

    }
}

順便說一句:你可以讓一個線程修改/替換propertyEntries,同時在這個模式的許多線程中進行迭代。

暫無
暫無

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

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