IT忍者神龟之Servlet的多线程 和 Servlet线程安全
来源:互联网 发布:淘宝商家怎么改头像 编辑:程序博客网 时间:2024/05/17 09:35
JSP/Servlet的多线程原理:
以多线程方式执行可大大降低对系统的资源需求,提高 系统的并发量及响应时间.
servlet 的线程安全
且参数传入方法是按传值volue copy的方式
所以是线程安全的
struts2的ServletContext采用的是TreadLocal模式,是线程安全的
所以每个ServletRequest对象对应每个线程,而不是多线程共享,是线程安全的。所以不用担心request参数和属性的线程安全性
(当用户打开多个同属于一个进程的浏览器窗口(常见的弹出窗口),在这些窗口的访问属于同一个Session,会出现多次请求,需要多个工作线程来处理请求,这时就有可能的出现线程安全问题)
servlet尽量用方法内变量,就一定线程安全么?局部变量的数据也来自request对象或session对象啊,它们线程安全么?
servletRequest 线程是安全的
因为:每个 request都会创建一个新线程,每个新线程,容器又都会创建一对servletRequest和servletResponse对象(这是servlet基本原理)
所以servletRequest对象和servletResponse对象只在一个线程内被创建,存在,被访问
常见的线程安全的解决办法:
1.使用方法内局部变量
2.对操作共享资源的语句,方法,对象,使用同步
比如写入磁盘文件,采用同步锁,但建议尽量用同步代码块,不要用同步方法
3.使用同步的集合类
使用Vector代替ArrayList
使用Hashtable代替HashMap。
4.不要在 Servlet中再创建自己的线程来完成某个功能。
Servlet本身就是多线程的,在Servlet中再创建线程,将导致执行情况复杂化
- 1.servelet就是一个CGI,但比传统的CGI要快得过
以多线程方式执行可大大降低对系统的资源需求,提高 系统的并发量及响应时间.
- JSP/Servlet容器默认是采用单实例多线程(这是造成线程安全的主因)方式处理多个请求的:
- 服务端把该JSP编译成一个CLASS文件
- 并创建一个该类的实例
- 然后创建一个线程处理CLIENT端的请求。
- 多请求,多线程:
servlet 的线程安全
- servlet里的 实例变量
- servlet方法里的局部变量
且参数传入方法是按传值volue copy的方式
所以是线程安全的
- Application对象
- ServletContext对象
struts2的ServletContext采用的是TreadLocal模式,是线程安全的
- HttpServletRequest对象和HttpServletResponse对象
所以每个ServletRequest对象对应每个线程,而不是多线程共享,是线程安全的。所以不用担心request参数和属性的线程安全性
- HttpSession
(当用户打开多个同属于一个进程的浏览器窗口(常见的弹出窗口),在这些窗口的访问属于同一个Session,会出现多次请求,需要多个工作线程来处理请求,这时就有可能的出现线程安全问题)
servlet尽量用方法内变量,就一定线程安全么?
servletRequest 线程是安全的
因为:每个 request都会创建一个新线程,每个新线程,容器又都会创建一对servletRequest和servletResponse对象(这是servlet基本原理)
所以servletRequest对象和servletResponse对象只在一个线程内被创建,存在,被访问
常见的线程安全的解决办法:
1.使用方法内局部变量
- 是因为各线程有自己堆栈空间,存储局部变量
- 方法参数传入,多采用传值(volue copy)传入方法内
2.对操作共享资源的语句,方法,对象,使用同步
比如写入磁盘文件,采用同步锁,但建议尽量用同步代码块,不要用同步方法
3.使用同步的集合类
使用Vector代替ArrayList
使用Hashtable代替HashMap。
4.不要在 Servlet中再创建自己的线程来完成某个功能。
Servlet本身就是多线程的,在Servlet中再创建线程,将导致执行情况复杂化
0 0
- IT忍者神龟之Servlet的多线程 和 Servlet线程安全
- Servlet的多线程 和 Servlet线程安全
- Servlet的多线程 和 Servlet线程安全
- Servlet的多线程 和 Servlet线程安全
- Servlet的多线程和线程安全
- Servlet的多线程和线程安全
- Servlet的多线程和线程安全
- Servlet的多线程和线程安全
- Servlet的多线程和线程安全
- Servlet的多线程和线程安全
- 多线程之servlet线程安全
- Servlet 多线程和Servlet线程安全
- servlet线程安全 servlet多线程 Struts 1 和 Struts 2 的线程安全
- servlet线程安全 servlet多线程 Struts 1 和 Struts 2 的线程安全
- Servlet的多线程机制与线程安全
- Servlet的多线程机制与线程安全
- servlet的多线程与设计线程安全的servlet
- Servlet之线程安全
- hdu 4109 dfs+剪枝优化
- 隐藏Android设备的开发者选项
- REST以及RESTful的实现:Web API
- Material Design(三)
- C++ Stream(流)
- IT忍者神龟之Servlet的多线程 和 Servlet线程安全
- x86函数调用堆栈的操作
- Redis学习手册(开篇)
- iOS开发系列之二 - UILabel 用法小结
- UIStepper
- 使用Dom4j解析XML
- java笔记(六)
- MySQL事务隔离级别详解
- HDOJ 2150 Pipe (线段相交)