stringbuffer 能线程安全是因为其所有公共方法均用 synchronized 修饰,锁住底层字符数组操作,确保同一时刻仅一个线程执行。

StringBuffer 是线程安全的字符串拼接工具,靠内部 synchronized 方法实现同步,无需额外加锁。
为什么 StringBuffer 能线程安全?
StringBuffer 的所有公共方法(如 append()、insert()、reverse()、toString())都用 synchronized 修饰,保证同一时刻只有一个线程能执行这些操作。底层字符数组(value)的操作被锁保护,避免多线程并发修改导致数据错乱或异常。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
基本用法:直接调用 append 等方法
创建 StringBuffer 实例后,多个线程可安全调用其方法,无需手动同步:
- 初始化时可指定初始容量(减少扩容次数,提升性能)
- 推荐使用 append() 拼接字符串、数字、布尔值等任意类型(自动调用 toString)
- 避免在循环中反复创建新 StringBuffer 对象;复用实例更高效
和 StringBuilder 的关键区别
StringBuilder 功能完全一致,但所有方法**不加 synchronized**,性能更高,仅适用于单线程场景。若明确无并发访问,优先选 StringBuilder;只要存在多线程写入同一 StringBuffer 实例,就必须用 StringBuffer。
实际使用注意点
- StringBuffer 本身线程安全,但若将它的引用暴露给多个线程并让它们共享修改,仍需确保逻辑上不会因执行顺序引发业务问题(例如拼接结果依赖调用时序)
- 不要把 StringBuffer 当作通用共享状态来传递复杂协作逻辑;简单拼接没问题,复杂编排建议配合其他同步机制
- 如果只是多个线程各自拼接、互不干扰,用局部 StringBuilder 更轻量
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










