StringBuffer
StringBuffer 是线程安全的可变字符串类。相比 StringBuilder,它的每个方法都加了 synchronized 修饰符,确保多线程环境下的安全。
与 StringBuilder 对比
| 对比 | StringBuilder | StringBuffer |
|---|---|---|
| 线程安全 | 否 | 是 |
| 性能 | 高 | 较低(有同步开销) |
| 使用场景 | 单线程 | 多线程 |
大多数情况下,如果确定是单线程环境,优先选择 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 实例,仍需外部同步来保证操作的原子性。
