0
我知道Java中的Array List和Vector類對於多線程來說是一個糟糕的選擇。我知道數組列表不同步,這是爲什麼多線程不好。我想知道Java中使用多線程的同步向量類性能較差的原因。Java集合中的Vector類爲什麼多線程處理性能差?
背後的原因是什麼?
我知道Java中的Array List和Vector類對於多線程來說是一個糟糕的選擇。我知道數組列表不同步,這是爲什麼多線程不好。我想知道Java中使用多線程的同步向量類性能較差的原因。Java集合中的Vector類爲什麼多線程處理性能差?
背後的原因是什麼?
Vector單獨爲每個方法同步對其數據的訪問。
可能有些情況下根本不需要同步,但它不能從向量中刪除。對於這種情況,Vector將會效率低下,因爲不必要的同步仍然會產生成本。
另一方面,可能會出現方法調用的整個序列應該同步的情況。然後,Vector方法的個體同步是無用的,並且再次增加了性能成本。
ArrayList可用於多線程程序,但具有外部同步。
我建議您閱讀Java Concurrency in Prctice以深入瞭解該主題。它可以幫助您瞭解外部/內部同步,併發集合以及更多的知識,這些都是真正瞭解同步方式之間的差異所必需的。
數組列表或鏈接列表方法是否可以在外部同步?當然是 –
:兩者都使用Collections.synchronizedList()。 –