Java 在Web应用程序DAO中使用StringBuffer或StringBuilder

Java 在Web应用程序DAO中使用StringBuffer或StringBuilder,java,multithreading,spring-mvc,spring-jdbc,Java,Multithreading,Spring Mvc,Spring Jdbc,传统观点认为java开发人员通常应该优先使用StringBuilder类而不是StringBuffer类。由于StringBuilder类方法是不同步的,因此它们通常比StringBuffer等同物快得多 我有一个基于spring框架的web应用程序,它运行在servlet容器(即ApacheTomcat)上。在数据库访问对象类中,我有一个方法,该方法构建SQL语句,然后通过JDBC数据源连接(封装在事务中)对数据库执行该语句 迄今为止,该方法已使用StringBuffer构建SQL语句。由于s

传统观点认为java开发人员通常应该优先使用StringBuilder类而不是StringBuffer类。由于StringBuilder类方法是不同步的,因此它们通常比StringBuffer等同物快得多

我有一个基于spring框架的web应用程序,它运行在servlet容器(即ApacheTomcat)上。在数据库访问对象类中,我有一个方法,该方法构建SQL语句,然后通过JDBC数据源连接(封装在事务中)对数据库执行该语句

迄今为止,该方法已使用StringBuffer构建SQL语句。由于spring框架创建的bean在默认情况下是单实例的,并且承载应用程序的servlet容器为它接收到的每个请求创建新线程(实际上,应用程序将在多个线程中同时执行),这意味着多个线程将调用DAO的单个实例

我总是觉得局部变量在java中是线程安全的(我隐约记得一些关于在堆栈中分配局部变量的事情,而线程并不共享它们的堆栈)。DAO方法中使用的上述StringBuffer是在该方法中声明和实例化的


在这种情况下,我们应该坚持使用(线程安全的)StringBuffer,还是可以使用(据说更快的)StringBuilder?

是的,方法局部变量是线程安全的。使用
StringBuilder
会更有效。

是的,方法局部变量是线程安全的。使用
StringBuilder
会更有效。

是的,方法局部变量是线程安全的。使用
StringBuilder
会更有效。

是的,方法局部变量是线程安全的。使用
StringBuilder
会更有效率。

转到
StringBuilder
。仍然使用StringBuffer的唯一原因是用于
Matcher.appendReplacement
。StringBuffer的同步几乎没有实际价值,因为一般情况下不希望出现无序内容。请转到
StringBuilder
。仍然使用StringBuffer的唯一原因是
Matcher.appendReplacement
。StringBuffer的同步几乎没有实际价值,因为一般情况下不希望出现无序内容。请转到
StringBuilder
。仍然使用StringBuffer的唯一原因是
Matcher.appendReplacement
。StringBuffer的同步几乎没有实际价值,因为一般情况下不希望出现无序内容。请转到
StringBuilder
。仍然使用StringBuffer的唯一原因是
Matcher.appendReplacement
。StringBuffer的同步几乎没有实际价值,因为人们通常不希望出现无序内容。。。。但是,不要期望与与数据库通信相比,性能差异会显著。。。。。。但是,不要期望与与数据库通信相比,性能差异会显著。。。。。。但是,不要期望与与数据库通信相比,性能差异会显著。。。。。。但是,不要期望与与数据库通信相比,性能差异会很大。。。