为什么不同步会使ArrayList更快,更不安全?

use*_*609 4 java concurrency arraylist

我读了以下声明:

ArrayLists是不同步的,因此比Vector快,但在多线程环境中安全性较低.

我想知道为什么不同步可以提高速度,以及为什么它不那么安全?

jjn*_*guy 10

我会尝试解决你的两个问题:

提高速度

如果ArrayList同步并且多个线程同时尝试从列表中读取数据,则线程必须等待才能获得列表上的独占锁.通过使列表保持不同步,线程不必等待,程序将运行得更快.

不安全

如果多个线程同时读取写入列表,则线程可能具有列表的不稳定视图,这可能导致多线程程序的不稳定.

  • @jinguy`ArrayList在多线程上下文中被认为不比`vector`快; 它是单线程上下文,其中`Vector`s中的额外同步开销使它们比`ArrayList`慢. (2认同)
  • @Binil:jjnguy的推理对我来说似乎是正确的.另外,我认为如果JVM只运行一个线程,则JVM会忽略同步操作.那么为什么`Vector`被认为与多线程程序的`ArrayList`速度相同? (2认同)