Skip to content

StringBuffer

StringBuffer 是线程安全的可变字符串类。相比 StringBuilder,它的每个方法都加了 synchronized 修饰符,确保多线程环境下的安全。

与 StringBuilder 对比

对比StringBuilderStringBuffer
线程安全
性能较低(有同步开销)
使用场景单线程多线程

大多数情况下,如果确定是单线程环境,优先选择 StringBuilder。

基本操作

java
public class StringBufferDemo {

    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();

        // 添加
        sb.append("Hello");
        sb.append(" World");
        System.out.println(sb);

        // 插入
        sb.insert(5, ",");
        System.out.println(sb);

        // 删除
        sb.delete(5, 6);
        System.out.println(sb);

        // 反转
        sb.reverse();
        System.out.println(sb);
    }
}

线程安全示例

StringBuffer 的所有方法都是同步的,适合在多线程间共享:

java
public class ThreadSafeDemo {

    // 多线程共享使用 StringBuffer
    public static void appendToBuffer(StringBuffer sb, String text) {
        sb.append(text);  // 线程安全,可以直接调用
    }

    public static void main(String[] args) {
        StringBuffer sharedBuffer = new StringBuffer();

        // 多线程共享时仍需外部同步
        synchronized (sharedBuffer) {
            sharedBuffer.append("Thread-safe");
        }
    }
}

需要注意的是,虽然 StringBuffer 自身方法是线程安全的,但如果多个线程同时访问同一个 StringBuffer 实例,仍需外部同步来保证操作的原子性。

基于 VitePress 构建