在生产型Web应用程序中,我的同伴程序员在各处都使用StringBuffer。现在,我负责应用程序的开发和更正。阅读StringBuilder和StringBuffer之后,我决定将所有StringBuffer代码替换为StringBuilder,因为我们不需要数据bean中的线程安全。
例如:(在每个数据bean中,我都可以看到StringBuffer的使用)
@Override
public String toString() {
StringBuffer sb = new StringBuffer();// replace it from StringBuilder
sb.append(" ABCD : ").append(abcd);
sb.append(", EFGH : ").append(efgh);
sb.append(", IJKL : ").append(ijkl);
}
我们为每个会话/请求创建一个单独的数据bean。会话由单个用户使用,其他用户无法访问它。
在迁移之前,我还应该考虑其他几点吗?
如果只有一个线程(没有等待线程/没有新线程将寻找对象锁定),则它与StringBuffer或StringBuilder的性能相同。我知道在使用StringBuffer的情况下,需要花费时间来获取对象锁,但是我想知道除了保持/释放对象锁外,它们之间是否存在任何性能差异。
StringBuffer
。我从未见过这样的代码,但是从多线程的角度来看,我几乎可以肯定这是一个糟糕的设计。由于我认为沿StringBuffer
接口同步线程是一个不好的主意,我认为此类不应该存在,应该一直使用StringBuilder
。正如其他人已经提到的那样,StringBuffer
由于历史原因存在。
sb
像示例中那样将其用作局部变量,则线程安全根本不重要。即使一千个线程同时进入该方法,每个线程也将具有自己的调用堆栈以及自己的局部变量。StringBuilders永远不会互相干扰。