有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java同步stringbuffer的用途是什么

正在同步的StringBuffer方法的用途是什么。当一个线程正在更改stringbuffer时,其他线程无法确定它的实际应用和用途


共 (3) 个答案

  1. # 1 楼答案

    我将线程安全视为对正确性的优化(避免未定义的行为)。在多线程环境中,^{}的使用至少是线程安全的(从无竞争条件或非同步访问的角度来看是正确的)

    String buffers are safe for use by multiple threads.

    这带来的性能成本可能会影响您,也可能不会影响您

    如果您不需要threadsafety,即您处于单线程环境中,或者字符串是单个函数调用的本地字符串,那么看起来您可以使用未同步的^{}

  2. # 2 楼答案

    What are practical applications and uses of StringBuffer?

    实际上没有,这就是为什么它被替换为^{}

    它是过去遗留下来的类,并没有被弃用,因为有很多代码在使用它

    例如,尽管在Java1.5中添加了StringBuilder,但在Java1.4中添加的正则表达式类^{}直到Java9才获得StringBuilder支持(参见^{}

    正如Javadoc所说:

    As of release JDK 5, this class has been supplemented with an equivalent class designed for use by a single thread, StringBuilder. The StringBuilderclass should generally be used in preference to this one, as it supports all of the same operations but it is faster, as it performs no synchronization.

  3. # 3 楼答案

    字符串缓冲区可以在多线程应用程序中安全使用,因为它在多线程环境中不会造成数据不一致

    示例:当我有一个初始值为“Java”的字符串生成器时,如果thread1尝试将“is”添加到字符串生成器中,thread2尝试将“supported”添加到字符串生成器中,则字符串生成器可能会变为“Java is”或“Java supported”或“Java IsSupported”,从而导致数据不一致

    在字符串缓冲区的情况下,如果thread1尝试添加“is”,thread2将等待,因此它只能变为“Java受支持”