struts2,servlet的线程安全问题
来源:互联网 发布:淘宝推广管理在哪 编辑:程序博客网 时间:2024/05/16 19:38
struts2中每个action有多个实例,处理一次请求就会生成一个实例,这些实例彼此独立,处理完毕就会销毁。因此每个action是线程安全的。
servlet是单例模式的,只会产生一个实例,当多个用户同时请求一个servlet的时候,tomcat就会派生出多个线程来执行servlet的代码,因此servlet是线程不安全的。
package servletThread;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ThreadSafeServlet extends HttpServlet{ private String name; //定义一个公共的私有变量 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub resp.setContentType("text/html"); name=req.getParameter("name"); try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } resp.getWriter().print("name:"+name); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub super.doPost(req, resp); }}
我们十秒钟内用浏览器访问ThreadSafeServlet?name=”zhangSan”和ThreadSafeServlet?name=”lisi”,显示结果均为name=”lisi”,这时候就是线程不安全。
解决方式:
1.将全局变量name定义为final类型,final类型修饰的变量为常量,这表示在servlet中只进行读操作,读操作不会出现线程安全的问题。
2.将name定义为全局变量,这时每个线程没有争用资源。
阅读全文
0 0
- struts2,servlet的线程安全问题
- servlet、struts1和struts2的线程安全问题
- Rhyme/ struts2与servlet的线程安全问题
- servlet,struts2线程安全问题浅析
- Servlet的线程安全问题
- servlet的线程安全问题
- Servlet的线程安全问题
- Servlet的线程安全问题
- Servlet的线程安全问题
- Servlet的线程安全问题
- Servlet的线程安全问题
- Servlet的线程安全问题
- servlet的线程安全问题
- Servlet的线程安全问题
- Servlet的线程安全问题
- servlet的线程安全问题
- Servlet的线程安全问题
- Servlet的线程安全问题
- atitit prj mnrs 项目中的几种经理角色.docx
- atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线1 2. 爬虫产品线1 3. 发帖机产品线1 4. 发动机产品线1 5. O2o产品线(旅游
- 初识 Python
- 树莓派3安装kali后的配置
- model的约定
- struts2,servlet的线程安全问题
- 使用selenium调用火狐浏览器爬取网页文本及链接
- 尊重历史,深入批判,大力声援方正科技索赔者的维权行动
- Glide使用
- MyEclipse8.5破解方法
- 算法导论9.1 最大值和最小值
- [PAT乙级]1062. 最简分数(20)
- Unity手游制作记-制作通用文本提示
- [PAT乙级]1014. 福尔摩斯的约会 (20)