Multithreading 为什么Java集合中的向量类在多线程方面性能较差?

Multithreading 为什么Java集合中的向量类在多线程方面性能较差?,multithreading,performance,class,arraylist,vector,Multithreading,Performance,Class,Arraylist,Vector,我知道Java中的数组列表和向量类对于多线程来说都是一个糟糕的选择。我知道数组列表不同步,这就是为什么多线程不好的原因。我想知道Java多线程同步向量类性能差的原因 这背后的原因是什么?Vector分别对每个方法的数据访问进行同步 在某些情况下,可能根本不需要同步,但无法从向量中删除同步。在这种情况下,矢量将是低效的,因为不必要的同步仍有成本 另一方面,在某些情况下,可能需要同步整个方法调用序列。然后Vector方法上的单个同步是无用的,并且再次增加了性能成本 ArrayList可用于多线程程序

我知道Java中的数组列表和向量类对于多线程来说都是一个糟糕的选择。我知道数组列表不同步,这就是为什么多线程不好的原因。我想知道Java多线程同步向量类性能差的原因


这背后的原因是什么?

Vector分别对每个方法的数据访问进行同步

在某些情况下,可能根本不需要同步,但无法从向量中删除同步。在这种情况下,矢量将是低效的,因为不必要的同步仍有成本

另一方面,在某些情况下,可能需要同步整个方法调用序列。然后Vector方法上的单个同步是无用的,并且再次增加了性能成本

ArrayList可用于多线程程序,但需要外部同步


我建议通过阅读来深入理解这个话题。它将帮助您了解外部/内部同步、并发集合以及更多,这对于真正了解同步方式之间的差异是非常必要的

数组列表或链表方法是否可以在外部同步?当然:对这两种方法都使用Collections.synchronizedList()。