论坛首页 Java企业应用论坛

Vector和ArrayList的本质区别到底是什么?

浏览 33311 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (6) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-02-25  
LZ你没有明白线程安全是指什么。
比如你的例子,MyList他只要保证同时只有一个线程能进入Add或Size,MyList就是线程安全的。
0 请登录后投票
   发表时间:2011-02-25  
starcheney 写道
luciferdevil 写道
StringBuffer 和StringBuilder 貌似就是线程安全的差别吧


好像不是哦。。。


StringBuffer: 可改变的Unicode字符序列
允许并发操作,是线程安全的
StringBulder: 可改变的Unicode字符序列
操作同StringBuffer,只是不支持并发操作,非线程安全的

来自:http://miaoge.iteye.com/blog/773784
0 请登录后投票
   发表时间:2011-02-25  
NanguoCoffee 写道
LS几位大哥,线程安全的概念是什么呀? 弄清楚没?
我理解的线程概念:
如果某个个类的一个对象,对于能够修改这个对象状态(如add)或者调用其他方法会影响其结果(如get)的任何方法,多线程调用任一方法时,能够保证任意时刻仅有一个线程能执行,
那么这个类就是线程安全的类。

从这个概念上来说StringBuffer, Vector都是线程安全的。

但是对于
if(!vector.contains(...)){
  vector.add(..)
}

这段代码在多线程情况下并不安全,但不能说:vector不是线程安全的。
因此在:
单线程下:Vector,StringBuffer的线程安全特性是额外的消耗
多线程下:Vector,StringBuffer的线程安全特性在绝大多数情况下不起作用。

因此催生了ArrayList 和StringBuider的出现,并将并发控制交给程序员。

我没记错的话,StringBuffer是基于StringBuider的吧?
0 请登录后投票
   发表时间:2011-02-25  
lz想表达的应该是:Vector这类api级别的同步,对于实际应用程序来说,意义不大。
你仍然需要在实际应用程序的应用级别再做同步,才能保证应用的线程安全。
0 请登录后投票
   发表时间:2011-02-25  
liuningbo 写道
我没记错的话,StringBuffer是基于StringBuider的吧?


像这样的问题,谁都别信,翻翻源码就清楚了。
0 请登录后投票
   发表时间:2011-02-25  
ironsabre 写道
lz想表达的应该是:Vector这类api级别的同步,对于实际应用程序来说,意义不大。
你仍然需要在实际应用程序的应用级别再做同步,才能保证应用的线程安全。


说的很对,楼主的问题很有代表性。
0 请登录后投票
   发表时间:2011-02-25   最后修改:2011-02-25
谁说Vector线程安全,我和谁急
0 请登录后投票
   发表时间:2011-02-25  
haigui.chen 写道
谁说Vector线程安全,我和谁急

我觉得你没有真的理解线程安全。
0 请登录后投票
   发表时间:2011-02-25  
LZ举的例子是并发编程里面的原子性问题,和vector的线程安全扯在一块容易误导人呀
0 请登录后投票
   发表时间:2011-02-25  
ironsabre 写道
haigui.chen 写道
谁说Vector线程安全,我和谁急

我觉得你没有真的理解线程安全。

可能是,在put if absent 下面,vector还会是线程安全的么?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics