2015-09-16 73 views
1

我正在采用算法实现类。我的老师提到了StringBuffer和StringBuilder,他说StringBuffer比StringBuilder更安全,因为在线程方面。真的吗?如果是这样,那是什么意思?我查了这个问题和许多提到的同步答案。任何人都可以解释这是什么意思,以及如何使StringBuffer比StringBuilder更安全?StringBuffer vs StringBuilder

+0

请参阅[什么是Java中的线程安全](http://stackoverflow.com/q/6324085/4125191) – RealSkeptic

+1

另请注意,这并不意味着您应该更喜欢使用StringBuffer来处理StringBuilder。恰恰相反 - 无论何时在本地使用它,在单个线程中,始终更喜欢'StringBuilder'。只有在需要在线程之间共享字符串构建对象的地方使用'StringBuffer'。 – RealSkeptic

+1

您几乎从不需要'StringBuffer'的“额外安全性”,它只会带来额外的性能成本,没有任何好处。 –

回答

5

StringBuffer已使所有方法同步。

java doc

字符的一个线程安全的可变序列

同步是同步到的代码部分线程访问一个系统,使至多一个线程可以执行同步块。

如果您的代码不是多线程,或者仅当您使用的StringBuffer未在线程之间共享,请使用StringBuilder。它更快。

从的StringBuilder javadoc

一个可变的字符序列。此类提供与StringBuffer兼容的API ,但与不保证 同步。这个类被设计用作落入式 替代的StringBuffer在地方字符串缓冲区是 正在使用单个线程(如通常是这种情况)。其中 可能,建议这个类优先使用 StringBuffer,因为在大多数实现中它将更快更快

0

由于所有的它的方法是同步的,这意味着,即使你使用,并在同一时间修改它有100个线程(或更多),这将充分处理其他请求之前执行每个操作。使用StringBuilder你没有这样的保证。

相关问题