MST

星途 面试题库

面试题:Java多线程下StringBuffer相较于StringBuilder的优势

在Java多线程环境中,StringBuffer和StringBuilder都用于字符串的动态操作,请阐述StringBuffer相较于StringBuilder在多线程场景下的优势,并说明其实现原理。
14.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

优势

在多线程场景下,StringBuffer相较于StringBuilder的优势在于StringBuffer是线程安全的,而StringBuilder是非线程安全的。这意味着在多线程环境中,多个线程可以安全地同时访问和操作StringBuffer实例,而不会出现数据竞争或不一致的问题,从而保证了程序的正确性和稳定性。

实现原理

StringBuffer实现线程安全是通过对其主要的修改方法(如appendinsert等)使用synchronized关键字进行同步。以append方法为例,其源代码如下:

@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}

当一个线程调用StringBuffer的同步方法时,它会获取StringBuffer实例的锁,其他线程如果想要调用相同实例的同步方法,就必须等待锁的释放。这样就确保了在同一时间只有一个线程可以修改StringBuffer的内容,从而实现了线程安全。