我正在阅读此 Stackoverflow thread关于使用 StringBuilder 与 StringBuffer。
底线似乎是,这两个集合是相同的,只是 StringBuffer 是同步的,是线程安全的,并且与 StringBuilder 相比,性能稍差一些,而 StringBuilder 则不是这些。
有人提出了 ArrayList 和 Vector 之间存在类似的关系。
除非我有意识地创建多个线程,否则不使用同步集合(或其他任何东西)是一个好的(安全)经验法则吗?
换句话说,我收到消息“尽可能使用新的 StringBuilder。”,我想知道的是,我如何确定它是可能的?
只要我不故意创建新线程,使用非同步集合是否安全?
最佳答案
使用不同步的东西,直到您确定需要同步为止。
部分问题例如StringBuffer
和 Vector
的缺点是它们并不总是以正确的方式同步。对于Vector
,您并不总是需要单独同步每个操作;通常,您真正想要的是同步操作 block ...为此,Vector
不一定比 ArrayList
或 Collections.synchronizedList
更好>.
当您知道您正在使用并发和多线程时,请计算出您需要的同步的详细信息,但只需将 StringBuffer
替换为 StringBuilder
只会给出你会产生一种错误的安全感——即使你决定稍后使用并发,这也不一定是正确的并发类型。
(如果您当前没有使用线程,那么将 StringBuffer
查找并替换为 StringBuilder
绝对没问题,甚至是推荐。上述参数为相反方向。)
关于Java:使用同步集合的经验法则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11887558/