Java 中 StringBuffer 在多线程逻辑中如何确保操作完整性

作者:袖梨 2026-07-07
StringBuffer 通过方法级 synchronized 锁保障多线程操作完整性,所有修改方法(如 append、insert)均同步于 this 实例,确保 char[] value 和 count 的一致更新,结果内容完整、无越界或错乱,但不保证执行顺序;需避免非原子复合操作,并配合合理初始化与使用方式。

StringBuffer 在多线程逻辑中保障操作完整性,靠的是方法级 synchronized 锁,不是靠避免共享,而是让共享变得可控——所有修改内部状态的操作(如 appendinsertdelete)都被强制串行执行。

同步机制直接作用于对象实例

每个 public 修改方法都声明为 public synchronized,锁目标是当前 StringBuffer 实例(this)。这意味着:

  • 线程 A 调用 sb.append("A") 时,会持有该实例锁;
  • 此时线程 B 若调用 sb.append("B"),必须等待 A 完成并释放锁;
  • 底层共享的 char[] valueint count 始终由同一把锁保护,不会出现写一半被中断、计数错乱或数组越界。

完整性体现在结果可预期,而非顺序可预测

多个线程共用一个 StringBuffer 实例时:

  • 每个 append 操作的内容完整保留,不会截断、不会混入乱码;
  • 不会抛 ArrayIndexOutOfBoundsException 或导致 count > value.length
  • 最终字符串一定是各次 append 内容的某种排列组合,比如 "A" 和 "B" 的结果只能是 "AB" 或 "BA",绝不会是 "A

相关文章

精彩推荐