我正在采用算法实现类。我的老师提到了StringBuffer和StringBuilder,他说StringBuffer比StringBuilder更安全,因为在线程方面。真的吗?如果是这样,那是什么意思?我查了这个问题和许多提到的同步答案。任何人都可以解释这是什么意思,以及如何使StringBuffer比StringBuilder更安全?StringBuffer vs StringBuilder
1
A
回答
5
StringBuffer
已使所有方法同步。
从java doc:
字符的一个线程安全的可变序列
同步是同步到的代码部分线程访问一个系统,使至多一个线程可以执行同步块。
如果您的代码不是多线程,或者仅当您使用的StringBuffer
未在线程之间共享,请使用StringBuilder
。它更快。
从的StringBuilder javadoc:
一个可变的字符序列。此类提供与StringBuffer兼容的API ,但与不保证 同步。这个类被设计用作落入式 替代的StringBuffer在地方字符串缓冲区是 正在使用单个线程(如通常是这种情况)。其中 可能,建议这个类优先使用 StringBuffer,因为在大多数实现中它将更快更快。
0
由于所有的它的方法是同步的,这意味着,即使你使用,并在同一时间修改它有100个线程(或更多),这将充分处理其他请求之前执行每个操作。使用StringBuilder你没有这样的保证。
相关问题
- 1. StringBuffer vs StringBuilder VS StringTokenizer
- 2. StringBuilder VS StringBuffer OR vector Vs ArrayList
- 3. String,StringBuffer和StringBuilder
- 4. StringBuffer setLength vs substring
- 5. Stringbuffer,Stringbuilder何时使用?
- 6. 字符串方法Append():StringBuilder的VS StringBuffer的
- 7. JAVA String vs StringBuffer
- 8. StringBuffer或StringBuilder用于我的查询
- 9. StringBuilder和Stringbuffer有什么区别?
- 10. StringBuilder与StringBuffer - 助记符想要
- 11. 凡用StringBuffer/StringBuilder的非字符串
- 12. Groovy的字面的StringBuilder/StringBuffer的
- 13. 的StringBuffer/StringBuilder的大小在Java
- 14. 测试StringBuilder和StringBuffer之间的区别
- 15. Servlet的doFilter方法中的StringBuffer或StringBuilder?
- 16. 的StringBuilder()与StringBuilder的(空)VS的StringBuilder( “”)
- 17. StringBuilder追加vs +
- 18. Streamwriter vs StringBuilder
- 19. StringBuilder Vs StringWriter/StringReader
- 20. asp.net usercontrol vs customcontrol vs stringbuilder
- 21. String vs StringBuffer。 IDEA的提示
- 22. Web控件vs StringBuilder
- 23. 的StringBuilder VS绳索
- 24. StringBuffer append()或String +?
- 25. Android StringBuilder vs可编辑
- 26. String.Format vs“string”+“string”或StringBuilder?
- 27. 关于方法在StringBuffer和StringBuilder中没有被覆盖?
- 28. 为什么不让StringBuilder和StringBuffer实现一个通用接口?
- 29. 为什么新的StringBuffer(新的StringBuilder(“foo”))能够工作?
- 30. 为什么StringBuffer/StringBuilder不覆盖equals或hashCode?
请参阅[什么是Java中的线程安全](http://stackoverflow.com/q/6324085/4125191) – RealSkeptic
另请注意,这并不意味着您应该更喜欢使用StringBuffer来处理StringBuilder。恰恰相反 - 无论何时在本地使用它,在单个线程中,始终更喜欢'StringBuilder'。只有在需要在线程之间共享字符串构建对象的地方使用'StringBuffer'。 – RealSkeptic
您几乎从不需要'StringBuffer'的“额外安全性”,它只会带来额外的性能成本,没有任何好处。 –