欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

为什么同步的StringBuffer从来都不是一个好主意

发布时间:2023/12/3 47 豆豆
生活随笔 收集整理的这篇文章主要介绍了 为什么同步的StringBuffer从来都不是一个好主意 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

介绍

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从来都不是一个好主意的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。