面试题答案
一键面试优势
在多线程场景下,StringBuffer
相较于StringBuilder
的优势在于StringBuffer
是线程安全的,而StringBuilder
是非线程安全的。这意味着在多线程环境中,多个线程可以安全地同时访问和操作StringBuffer
实例,而不会出现数据竞争或不一致的问题,从而保证了程序的正确性和稳定性。
实现原理
StringBuffer
实现线程安全是通过对其主要的修改方法(如append
、insert
等)使用synchronized
关键字进行同步。以append
方法为例,其源代码如下:
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
当一个线程调用StringBuffer
的同步方法时,它会获取StringBuffer
实例的锁,其他线程如果想要调用相同实例的同步方法,就必须等待锁的释放。这样就确保了在同一时间只有一个线程可以修改StringBuffer
的内容,从而实现了线程安全。