精华帖 (0) :: 良好帖 (5) :: 新手帖 (6) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-25
LZ你没有明白线程安全是指什么。
比如你的例子,MyList他只要保证同时只有一个线程能进入Add或Size,MyList就是线程安全的。 |
|
返回顶楼 | |
发表时间:2011-02-25
starcheney 写道 luciferdevil 写道 StringBuffer 和StringBuilder 貌似就是线程安全的差别吧
好像不是哦。。。 StringBuffer: 可改变的Unicode字符序列 允许并发操作,是线程安全的 StringBulder: 可改变的Unicode字符序列 操作同StringBuffer,只是不支持并发操作,非线程安全的 来自:http://miaoge.iteye.com/blog/773784 |
|
返回顶楼 | |
发表时间:2011-02-25
NanguoCoffee 写道 LS几位大哥,线程安全的概念是什么呀? 弄清楚没?
我理解的线程概念: 如果某个个类的一个对象,对于能够修改这个对象状态(如add)或者调用其他方法会影响其结果(如get)的任何方法,多线程调用任一方法时,能够保证任意时刻仅有一个线程能执行, 那么这个类就是线程安全的类。 从这个概念上来说StringBuffer, Vector都是线程安全的。 但是对于 if(!vector.contains(...)){ vector.add(..) } 这段代码在多线程情况下并不安全,但不能说:vector不是线程安全的。 因此在: 单线程下:Vector,StringBuffer的线程安全特性是额外的消耗 多线程下:Vector,StringBuffer的线程安全特性在绝大多数情况下不起作用。 因此催生了ArrayList 和StringBuider的出现,并将并发控制交给程序员。 我没记错的话,StringBuffer是基于StringBuider的吧? |
|
返回顶楼 | |
发表时间:2011-02-25
lz想表达的应该是:Vector这类api级别的同步,对于实际应用程序来说,意义不大。
你仍然需要在实际应用程序的应用级别再做同步,才能保证应用的线程安全。 |
|
返回顶楼 | |
发表时间:2011-02-25
liuningbo 写道 我没记错的话,StringBuffer是基于StringBuider的吧?
像这样的问题,谁都别信,翻翻源码就清楚了。 |
|
返回顶楼 | |
发表时间:2011-02-25
ironsabre 写道 lz想表达的应该是:Vector这类api级别的同步,对于实际应用程序来说,意义不大。
你仍然需要在实际应用程序的应用级别再做同步,才能保证应用的线程安全。 说的很对,楼主的问题很有代表性。 |
|
返回顶楼 | |
发表时间:2011-02-25
最后修改:2011-02-25
谁说Vector线程安全,我和谁急
|
|
返回顶楼 | |
发表时间:2011-02-25
haigui.chen 写道 谁说Vector线程安全,我和谁急
我觉得你没有真的理解线程安全。 |
|
返回顶楼 | |
发表时间:2011-02-25
LZ举的例子是并发编程里面的原子性问题,和vector的线程安全扯在一块容易误导人呀
|
|
返回顶楼 | |
发表时间:2011-02-25
ironsabre 写道 haigui.chen 写道 谁说Vector线程安全,我和谁急
我觉得你没有真的理解线程安全。 可能是,在put if absent 下面,vector还会是线程安全的么? |
|
返回顶楼 | |