我正在实现我的自定义筛选器:
public class MyFilter implements javax.servlet.Filter
我应该在这个doFilter
方法中使用哪个-StringBuffer还是StringBuilder?
我想这样使用它:
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(MY_CODE_HERE);
response.sendRedirect(stringBuffer.toString());
或
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(MY_CODE_HERE);
response.sendRedirect(stringBuilder.toString());
我知道StringBuffer
是线程安全的,但是StringBuilder
就足够了吗?
局部变量是线程安全的,在doFilter()
方法中声明的变量是线程安全的。出于您的目的使用StringBuilder
,因为您不应该不必要地承担StringBuffer
中使用的同步开销。
此外,Servlet请求和响应对象是为每个新的请求和响应重新创建的,因此从本质上讲,它们是线程安全的。doFilter()
方法将在每个请求的单独线程中执行。
建议如下:
因为它将是一个局部变量,不被线程共享,所以可以使用StringBuilder。
StringBuilder是一个更好的选择,因为它更快,因为它的非同步性质。ServletFilter doFilter为每个请求在自己的线程中运行,所以你不需要同步的数据结构。如果它仅仅是一个局部变量,那么StringBuilder就是选择。