【问题标题】:Using StringBuffer in single thread applications在单线程应用程序中使用 StringBuffer
【发布时间】:2013-11-11 08:32:36
【问题描述】:

是否有理由在单线程应用程序中使用StringBuffer 而不是StringBuilder?如果我们不计算使用多线程的应用程序中的同步,StringBuffer 有什么优势吗?

【问题讨论】:

    标签: java stringbuilder stringbuffer


    【解决方案1】:

    我能想到的唯一原因是与 1.5 之前的 Java 兼容(可能仍在一些大公司中使用),以及要与不支持 StringBuilder 的其他平台(即 CLDC)共享的代码。

    【讨论】:

      【解决方案2】:

      没有。即使在多线程应用程序中,您也不一定需要StringBuffer,除非您实际上是从多个线程处理它。如果您愿意,可能还有更好的数据结构可供使用。

      【讨论】:

        【解决方案3】:

        是否有理由在单线程应用程序中使用 StringBuffer 而不是 StringBuilder?

        答案是:没有理由。

        【讨论】:

          【解决方案4】:

          没有理由选择StringBuffer。以下语句是从StringBufferDoc 复制而来的:

          从 JDK 5 开始,这个类已经被一个为单线程使用而设计的等效类 StringBuilder 进行了补充。通常应优先使用 StringBuilder 类,因为它支持所有相同的操作,但速度更快,因为它不执行同步。

          【讨论】:

            【解决方案5】:

            StringBuilder 具有非同步方法,而 StringBuffer 具有同步方法。因此,对于单线程应用程序,建议使用 StringBuilder。

            【讨论】:

              【解决方案6】:

              StringBuffer 仅在我们想要线程安全时使用。将StringBuffer 类用于单线程应用程序并不是一个好主意,因为它会使处理速度变慢。因此,如果您不打算使用线程,请使用 StringBuilder 类,因为由于缺少同步,它会比 StringBuffer 更有效。

              【讨论】:

                【解决方案7】:

                你可以在单线程应用程序中使用StringBuffer,但是没有理由。

                虽然,现代 JIT-comiler 非常聪明,它可以 eliminated 不必要的同步和 StringBuffer 可以转向 StringBuilder。但这不可能发生。 =)

                【讨论】:

                  【解决方案8】:

                  一般来说,没有理由使用 StringBuffer!

                  (即使你有一些古老的应用程序或库,通常也只有生成的String 被传递...)

                  String 从多个线程接收输入的用例应该是什么?

                  人们可能会考虑诸如日志记录之类的事情,但如果需要在多线程环境中进行日志记录,则可以使用许多解决方案,而无需自己发明...

                  所以:

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-05-15
                    • 2012-07-04
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多