黑马程序员技术交流社区

标题: 关于Vector线程同步的问题? [打印本页]

作者: 孙涛00    时间: 2013-10-24 09:36
标题: 关于Vector线程同步的问题?
我们都知道ArrayList是非同步的,Vector是线程同步。它们都实现了List接口,每个ArrayList都是一个容器,当多个线程同时访问一个ArrayList的时候出现了不同步的问题,而Vector在多线程访问的时候是线程同步的,这二者在同步问题上根本的区别是什么?还有就是它们都有iterator和listIterator方法,所返回的迭代器是“快速失败”的,这里的快速失败是什么意思?
作者: 王飚    时间: 2013-10-24 12:20
vector具有自己独特的方式:枚举,而不是用迭代器,同时,vector是同步的,较低效,这也是vector被多数环境下被替代的主要原因;
作者: 孙涛00    时间: 2013-10-24 12:20
我之前在做坦克大战的时候,子弹类,将每个坦克的多颗子弹装入到Vector集合中,而多个坦克线程同时运行,如果用ArrayList会出现很诡异的现象:子弹击中坦克,子弹销毁,但是在游戏面板中仍然还存在这颗子弹。

shot.png (74.96 KB, 下载次数: 117)

shot.png

作者: 漫步人    时间: 2013-10-24 13:44
Vector 变长数组算法实现 早期提供 慢 线程安全
Vector 旧(1.2以前)
作者: 孙涛00    时间: 2013-10-24 14:26
那Vector一般被替代成什么呢?

vector被替代.png (10.61 KB, 下载次数: 97)

vector被替代.png

作者: 回天之力    时间: 2013-11-3 10:20
首先,我通过有一次查找Vector的api,唉函数功能中没有看到Iterator,而它的去除元素的方式是用枚举
        Enumeration<E> elements()     返回此向量的组件的枚举。 所以当你用Iterator取它的元素时,肯定失败报错。
第二,从版本上也可以看出来,Vector是1.0版本的,而Iterator为1.2版本的。
第三,但用Vector时,它是同步,每次都要进行锁的判断,很低效。所以用不同步的ArrayList替代,当需要同步时,只需要自己加锁即可。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2