社区
Web 开发
帖子详情
filter是否有线程安全的问题
s_h_o_w_i_c_y
2011-02-27 08:58:29
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??
...全文
640
5
打赏
收藏
filter是否有线程安全的问题
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
火龙果被占用了
2011-02-28
打赏
举报
回复
[Quote=引用 3 楼 s_h_o_w_i_c_y 的回复:]
这样一个请求如http://ip:port/path?charset=GB2312就把全局变量charset设为GB2312。
而之后另外个请求http://ip:port/path的编码是否就变为GB2312
[/Quote]
会的。
如果只是想针对单独请求的话,可以在 doFilter 中这样:
String c = charset;
if(request.getParamert("charset") != null){
c = request.getParamert("charset");
}
Filter 是在 Servlet 容器启动时就初始化的,因此可以认为是以单例对象存在的,如果一个请求线程对其中的成员变量修改的话,会影响到其他的请求线程,因此认为是多线程不安全的。
朱超ZhuChao.Tech
2011-02-27
打赏
举报
回复
[Quote=引用 3 楼 s_h_o_w_i_c_y 的回复:]
引用 2 楼 zhuchao_ko 的回复:
引用楼主 s_h_o_w_i_c_y 的回复:
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??
WEB.XML是每次启动的时候容器加载的,话说你改了WEB.XML的内容要生效是不是要重新启动下容……
[/Quote]
你要修改的是成员变量那会造成线程安全问题。
s_h_o_w_i_c_y
2011-02-27
打赏
举报
回复
[Quote=引用 2 楼 zhuchao_ko 的回复:]
引用楼主 s_h_o_w_i_c_y 的回复:
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??
WEB.XML是每次启动的时候容器加载的,话说你改了WEB.XML的内容要生效是不是要重新启动下容器呢?
[/Quote]
没说改web.xml啊。就是说比如在doFilter里面这么一句:
if(request.getParamert("charset")!=null){
charset = "GB2312";
}
(web.xml配的可能为utf-8)
这样一个请求如http://ip:port/path?charset=GB2312就把全局变量charset设为GB2312。
而之后另外个请求http://ip:port/path的编码是否就变为GB2312
朱超ZhuChao.Tech
2011-02-27
打赏
举报
回复
[Quote=引用楼主 s_h_o_w_i_c_y 的回复:]
如中文编码filter,设置全部变量charset ,然后init里面读取web.xml的配置进行设置,如果在doFilter()里面对charset进行修改,这样是否就存在线程安全的问题??
[/Quote]
WEB.XML是每次启动的时候容器加载的,话说你改了WEB.XML的内容要生效是不是要重新启动下容器呢?
servlet-api-2.5.jar和jsp-api-2.1.jar
servlet-api-2.5.jar和jsp-api-2.1.jar
JDK 1.8 64位.rar
Java JDK 1.8 64位
Filter
的
线程安全
问题
6)
Filter
的
线程安全
问题
: 和Servlet一样,为了提高性能,
Filter
也采取多线程模式。即:每一个线程来应答一个用户浏览器,而且这个线程和用户要访问 的目标Servlet的线程是同一个线程。说得更准确一点,当用户访问某个资源需要经过过滤器时,服务器中一个线程为了应答这个客户请求,先调用过滤器中 的do
Filter
方法,再根据
是否
有chain.do
Filter
的指令,决定
是否
调用目标资源...
Java:jdk8-并行流
线程安全
问题
解决方案
jdk8 Stream API的出现大大简化了我们对于集合元素的处理代码,对于串行流来说,无需考虑
线程安全
问题
;但是,对于并行流来说,由于它是以多线程的方式并行处理同一个集合中的数据元素的,因此,存在着
线程安全
问题
。 例如:使用并行流向一个集合中存入数据,对于这种操作,由于这个集合对象是被作为共享资源使用的,如果不加注意,就会存在
线程安全
问题
。
被我们忽略的HttpSession
线程安全
问题
所以结论是:如果你能保证不会对”从HttpSession中获得的对象“调用set方法来修改它,那么保存在HttpSession中的对象可以不是
线程安全
的(因为他是”事实不可变对象“,并且ConcurrentHashMap保证了它是被”安全发布的“);不然的话,就存在并发
问题
。下面分析一下为什么将一个这样的Java对象保存在HttpSession中是有
问题
的,至少在
线程安全
方面不严谨的,可能会出现并发
问题
。虽然getAttribute,setAttribute是
线程安全
的了,那么下面的代码就是
线程安全
的吗?
Web 开发
81,117
社区成员
341,740
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章