传统观点认为java开发人员通常应该优先使用StringBuilder类而不是StringBuffer类。由于StringBuilder类方法是不同步的,因此它们通常比StringBuffer等同物快得多。
我有一个基于spring框架的web应用程序,它运行在servlet容器(即ApacheTomcat)上。在数据库访问对象类中,我有一个方法,该方法构建SQL语句,然后通过JDBC数据源连接(封装在事务中)对数据库执行该语句。
迄今为止,该方法已使用StringBuffer构建SQL语句。由于Spring框架创建的bean默认情况下是单例的,托管应用程序的servlet容器为它接收的每个请求创建新的线程(实际上,应用程序将同时在多个线程中执行),这意味着多个线程将调用DAO的单个实例。
我总是觉得局部变量在java中是线程安全的(我隐约记得一些关于在堆栈中分配局部变量的事情,而线程并不共享它们的堆栈)。DAO方法中使用的上述StringBuffer是在该方法中声明和实例化的。
在这种情况下,我们应该坚持使用(线程安全的)StringBuffer,还是可以移动到(据说要快得多的)StringBuilder?
是的,方法局部变量是线程安全的。使用StringBuilder
会更有效率。