这里简单举一个例子,比如说:使用ArrayList和vector这两个集合,前者是线程不安全,后者是线程安全,在性能上面,线程不安全的ArrayList肯定比线程安全的Vector性能要好一点。我们时常就说ArrayList的效率高,突然想问为什么?
我的猜测就是因为线程安全的类,例如:Vector底层使用了锁在保证线程的安全,而锁的使用是需要额外的开销的,但是在单线程环境下,这种额外的开销就显得画蛇添足了,因此是线程安全类的锁机制导致了其性能较低。
我去看了Vector的底层源码,发现还真的是这样,我去查阅了其他的线程安全类,下面基本上都是使用了synchronized关键字来保证方法的安全性问题,因此,问题的根源就在这里,大量的使用锁导致的该类的性能较低。