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

StringBuffer or StringBuilder use in a Web Application DAO

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

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

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

我一直认为局部变量在 java 中是线程安全的(我依稀记得局部变量在堆栈中分配并且线程不共享它们的堆栈)。在我们的 DAO 方法中使用的上述 StringBuffer 是在该方法中声明和实例化的。

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

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