本问题已经有最佳答案,请猛点这里访问。

我正在实现我的自定义筛选器:

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是否足够?

stackoverflow.com/questions/12961254/…

正如JavaDoc所建议的,如果可以的话,应该始终使用StringBuilder。注意:只有当您对它执行一个操作时,StringBuffer才是线程安全的,对于多个操作来说,它不是线程安全的,这使得它非常无用。

这根本不像是一个复制品——这指的是过滤器中StringBuffer的含义,而不是两者之间的实际差异。

局部变量是线程安全的,在doFilter()方法中声明的变量是线程安全的。为您的目的使用StringBuilder,因为您不应该不必要地招致StringBuffer中使用的同步开销。

此外,servlet请求和响应对象是为每个新的请求和响应重新创建的,因此根据其性质,它们是线程安全的。对于每个请求,将在单独的线程中执行doFilter()方法。

建议阅读:

为什么局部变量在Java中是线程安全的。

Java中的StringBuilder和StrugBuffic

servlet过滤器标记wiki

因为它是一个局部变量,而不是由线程共享,所以可以使用StringBuilder。

StringBuilder设计为不带synchronization的StringBuffer的替代品。

只需使用StringBuilder,除非您真正尝试在线程之间共享缓冲区。StringBuilder是原始synchronized StringBuffer类的非同步相对类。

在你的例子中,StringBuilder是完全合理的。即使在其他情况下,也要考虑同步方法,然后使用StringBuffer。

StringBuilder是一个更好的选择,因为它具有非同步特性,速度更快。每个请求的servletfilter-dofilter都在自己的线程中运行,因此您不需要同步的数据结构。如果它只是一个局部变量,那么StringBuilder就是选择。

只要它是在dofilter()方法中,它的thread-safe和request scoped中。因此,StringBuilder是显而易见的选择。

当然,除非该方法中有多个线程同时对其进行修改:)

dofilter在java中_关于java:Servlet的doFilter方法中的StringBuffer或StringBuilder?相关推荐

  1. (1 24) 3 java代码_《Java语言程序设计》测试题及参考答案(第1部分)

    一.单项选择题 1.Java Applet编程时用户的Applet程序类的正确定义是哪一种 ? (1)class MyApplet extends applet{ } (2)class MyApple ...

  2. java异常_聊聊Java中的异常及处理

    前言 在编程中异常报错是不可避免的.特别是在学习某个语言初期,看到异常报错就抓耳挠腮,常常开玩笑说编程1分钟,改bug1小时.今天就让我们来看看什么是异常和怎么合理的处理异常吧! 异常与error介绍 ...

  3. 读入的字节都写入字节数组中_使用Java将文件读入字节数组的7个示例

    读入的字节都写入字节数组中 嗨,大家好,Java程序员经常在现实世界中遇到编程问题,他们需要将文件中的数据加载到字节数组中,该文件可以是文本文件或二进制文件. 一个示例是将文件的内容转换为String ...

  4. nc提示java过期_用友NC系统使用过程中常见问题和解决方法!财会必看!

    原标题:用友NC系统使用过程中常见问题和解决方法!财会必看! 用友NC系统使用过程中常见问题和解决方法: 1.无法安装客户端插件,不能进入NC系统登陆界面 问题现象 现象1:可以打开web界面,但无法 ...

  5. 用友java错误_用友NC系统使用过程中常见问题和解决方法

    用友NC系统使用过程中常见问题和解决方法: 1.无法安装客户端插件,不能进入NC系统登陆界面 问题现象 现象1:可以打开web界面,但无法进入登陆界面,一直停留在右图所示界面. 现象2:系统提示安全警 ...

  6. 谷歌去水印java实现_在Java中实现Google的“您的意思是”功能

    谷歌去水印java实现 介绍 搜索引擎用户经常因各种原因而拼写错误的搜索词,包括键盘问题(键不起作用),陌生的国际名称(例如Sigmund Freud),意外更改一个字母(Sinpsons)或添加一个 ...

  7. java地区_在Java中存储国家/地区代码,名称和Continent的最佳方式

    在ISO 3166中有246个国家,你可能会在此背后得到一个继电器大枚举.我更喜欢使用包含国家/地区列表的 XML文件,您可以从 http://www.iso.org/下载一个并加载它们(例如,当应用 ...

  8. java 微秒_现在有任何新的方法可以在Java中以微秒的...

    TL;博士 Instant.now() 2018-03-09T21:03:33.831515Z 使用Java 9及更高版本,您可以使用microseconds分辨率捕获当前时刻. 上面的示例是针对ma ...

  9. resultset java 类型_关于JAVA中Resultset的类型

    JAVA中Resultset是一个类 而不是一个方法.记住啊. 结果集(ResultSet)是数据中查询结果返回的一种对象,可以说结果集是一个存储查询结果的对象,但是结果集并不仅仅具有存储的功能,他同 ...

最新文章

  1. libusb中的热插拔使用举例
  2. bs4爬取的时候有两个标签相同_python爬虫初体验,爬取中国最好大学网大学名次...
  3. android otp接口,Android-高通平台调试camera的OTP参数
  4. 全面解析Java的垃圾回收机制
  5. 全球及中国蓝牙智能锁行业发展格局及投资经营效益分析报告2022-2027年
  6. php调用root权限,PHP执行root权限程序
  7. wyh 的 Code Style
  8. 手把手教你用Python求最大值和最小值
  9. 《当程序员的那些狗日日子》(五十四)转折
  10. python绘制小猪佩奇
  11. docx文件怎样打开 - 转
  12. SQL动态配置,动态解析SQL
  13. 创建Person接口(即“人”),它有setData()和getData()方法对“人”属性name、sex和birthday赋值和获得这些属性组成的字符串信息创建类Student实现Person接口
  14. 图像处理之:最大类间方差法法进行图像二值化处理
  15. 数学通道的应用(六)-补偿气缸压力
  16. 签名证书(.keystore)生成指南
  17. [iOS]仿微博视频边下边播之滑动TableView自动播放
  18. Linux aarch64交叉编译之 Google filament引擎
  19. 达内-JavaWeb考试复习
  20. 洛谷B2065 鸡尾酒疗法(while限制组数)

热门文章

  1. 考场视频监控设计:如何基于EasyCVR打造考场在线巡查系统?
  2. 湖南省大学生计算机应用竞赛,湖南省第16届大学生计算机程序设计竞赛
  3. C++ 文件流的详解
  4. c语言prime函数怎么用_【自学编程】C语言编程简单的小程序,计算长方体体积!...
  5. 游戏3D建模师是一个什么样的职业
  6. Salesforce LWC(三):初步认识
  7. 目前音质好的几款音频功放芯片
  8. php jSignature,jSignature手写签名
  9. Umi v3 Ant Design Pro v5 从零开始实战视频教程(34 个视频)
  10. linux是x64还是x86,Linux x86和x64的区别