1.线程同步可以保证多线程运行时的安全,但是由于同步时每次都要判断锁,所以会降低执行效率;而线程不同步运行时,不需要判断锁,这样就会提高效率,缺点是不能保证多线程安全。
2.Vector是JDK1.0就有了,而ArrayList是JDK1.2出现的,Vector之所以被代替肯定是有其缺点的:
比如,他提供的addElement(Object obj)等方法,名字都过长;
通过查API文档可以发现他里面有很多功能重复的方法;
还有就是它实现了线程同步,所以性能低。
而ArrayList出现后,将Vector的方法名字变短,如add(Object obj)与addElement(Object obj)的功能是一样的,他里面没有方法名很长的方法;
虽然当多条线程访问一个ArrayList时,会出现安全问题,但是collections 工具类中提供了synchronizedCollection(Collection<T> c) 方法来保证ArrayList的多线程安全。
如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高执行效率。
呵呵,也是刚开始学习,以上是我的浅见,多指教! |