我知道Java中的Array List和Vector类都是多线程的糟糕选择。我知道Array List没有同步,因为多线程的原因并不好。我想知道Java中带有多线程的同步向量类性能不佳的原因。
背后的原因是什么?
答案 0 :(得分:2)
Vector会为每个方法单独同步对其数据的访问。
可能存在根本不需要同步但无法从矢量中删除的情况。对于这种情况,Vector将是低效的,因为不必要的同步仍然有其成本。
另一方面,可能存在应该同步整个方法调用序列的情况。然后,Vector的方法上的单独同步是无用的,并再次增加了性能成本。
ArrayList可用于多线程程序,但具有外部同步功能。
我建议您阅读Java Concurrency in Prctice以深入了解该主题。它将帮助您了解外部/内部同步,并发集合以及真正了解同步方式之间差异所需的更多内容。