当前位置:
首页 >
为什么同步的StringBuffer从来都不是一个好主意
发布时间:2023/12/3
47
豆豆
生活随笔
收集整理的这篇文章主要介绍了
为什么同步的StringBuffer从来都不是一个好主意
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
介绍
StringBuffer是用于可变字符串的同步类。 使其同步的主要问题是
StringBuffer的问题
这是来自真实类的示例,该类用于许多交易系统的生产中。 它不是一种常用的方法,但是您可能会认为StringBuffer为您提供了线程安全,而实际上却没有。 public void addProperty(String name, String value) {if (value != null && value.length() > 0) {if (sb.length() > 0) {sb.append(',');}sb.append(name).append('=').append(value);}} 尽管单个调用是线程安全的,但多个调用却不是。 要找到不涉及多个调用(包括toString)的StringBuffer的好用法,几乎是不可能的一个难题
想象一下三个线程的调用(不分先后) T1: addProperty("a", "b"); T2: addProperty("c", "d"); T3: sb.toString();编写一个程序,该程序将生成T3的sb.toString()的所有可能输出(我发现是89)。出于线程安全的考虑,您可以将其减少到4。
注意
如果使用StringBuilder,情况会更糟,但是至少您可能不会认为方法不是线程安全的。 例如SimpleDateFormat使用StringBuffer
参考: 为什么我们的JCG合作伙伴 Peter Lawrey在Vanilla Java博客上从来没有一个同步StringBuffer的好主意 。并发 2013-04-26
彼得·劳瑞翻译自: https://www.javacodegeeks.com/2013/04/why-a-synchronized-stringbuffer-was-never-a-good-idea.html
总结
以上是生活随笔为你收集整理的为什么同步的StringBuffer从来都不是一个好主意的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 深圳中兴通讯厂在哪里
- 下一篇: 创建委托登录模块(用于JBoss EAP