关于struts1与struts2的方法中使用StringBuffer与StringBuilder问题

blue6snow 2014-02-26 04:39:01
最近公司来了一位牛逼哄哄的人,今天公司开了一次代码规范会议,最后代码优化占了差不多一半,其中有一条:
建议在action中使用StringBuffer进行字符串的封装。
他的理由如下:
1、因为Struts1是线程安全的,Spring会为每个action在每一个请求中创建一个实例(我们的项目的实例是由Spring管理,bean的scope="request"),因此不存在线程安全问题,所以在Struts1的action中可以使用StringBuilder来创建。
2、因为Struts2是线程不安全的,因为struts的action一般不由Spring来管理,因此存在线程安全问题,因此采用线程安全的StringBuffer比较好,因此统一规定使用StringBuffer。

但是据我所知:
1、Struts1是线程非安全的,属于单例模式,但是如果是将变量写在action类的方法内,属于局部变量,因此该变量是无线程安全问题的,因为局部变量本身就是本线程才能访问,因此不管是否用Spring管理,在方法内部都可以使用StringBuilder。
2、Struts2是机制线程安全的,每次访问时会生成新的Action实例,因为也可以使用StringBuilder。

但是由于本人经验欠缺,还望各位指点下Struts1与Struts2内部机制到底是哪种?
...全文
201 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaofuqi 2014-02-27
  • 打赏
  • 举报
回复
楼主的理解挺好的。
  • 打赏
  • 举报
回复
不一定的,看具体实现 如果项目中用到了多线程 建议使用StringBuffer, 单线程的话就使用 StringBuilder
jiekou0704 2014-02-27
  • 打赏
  • 举报
回复
只习惯用StringBuffer。。哈哈哈
菜鸟一天 2014-02-27
  • 打赏
  • 举报
回复
据我所知,LZ关于Struts1和Struts2的说法是正确的。Struts1的action,单例,非线程安全;Struts2的action,线程安全。局部变量无线程安全问题,LZ说之后受教了,参考:http://blog.csdn.net/aaa1117a8w5s6d/article/details/8295527
oh_Maxy 2014-02-26
  • 打赏
  • 举报
回复
LZ说的对啊。 除非Action的某个属性为StringBuilder/StringBuffer,局部变量的话,其实无所谓了,就算使用StringBuffer,如果方法本身存在并发问题,还是白搭。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧