service方法
1) 每当服务器接收到对Servlet的请求时,服务器就会产生一个新线程, 并调用service。
service方法检查HTTP请求类型,请相应地调用doGet、doPost、doPut、doDelete。
2) 被container调用去响应(ServletResponse)来自客户端的请求(ServletRequest);
4. Servlets的多线程安全
1) 多线程占用资源少,处理速度快,提高了效率。
2) 一些编码建议:
a. 对变量和方法定义适当的访问方式, 例如单纯取值操作不会有多线程安全问题;
b. 同步化所有访问重要数据的实例变量;
c. 创建访问类变量的访问方法。
5. SingleThreadModel接口
1) 如果希望禁止多线程访问,可以让Servlet使用SingleThreadModel接口:
public class YourServlet extends HttpServlet implements SingleThreadModel{ ... }
2) 使用此接口,系统将保证不会存在多个请求线程同时访问Servlet的单个实例。
但是仍然需要同步对存储在Servlet外部的类变量或共享字段的访问。
3) 如Servlet频繁被访问,则Servlet访问的同步将严重影响性能(延时)。
6. destroy方法
1) 服务器决定删除已经加载的Servlet实例之前将调用Servlet的destroy方法;
2) 该方法允许Servlet:
a. 关闭数据库连接;
b. 中止后台线程;
c. 将Cookie程序清单或访问计数写到磁盘以及执行其他类似的收尾工作。
7. 在Servlet终止时处理Service线程
1) 在destroy()方法中:
如有服务(通过一个同步化的实例方法取得当前线程数大于0),则置关闭状态为true(通过一个同步化的实例方法实现)。
然后循环等待服务线程数为0.
2) 在Service()方法中: 如见关闭状态为true,便不执行具体逻辑方法,直接退出。
1) 每当服务器接收到对Servlet的请求时,服务器就会产生一个新线程, 并调用service。
service方法检查HTTP请求类型,请相应地调用doGet、doPost、doPut、doDelete。
2) 被container调用去响应(ServletResponse)来自客户端的请求(ServletRequest);
4. Servlets的多线程安全
1) 多线程占用资源少,处理速度快,提高了效率。
2) 一些编码建议:
a. 对变量和方法定义适当的访问方式, 例如单纯取值操作不会有多线程安全问题;
b. 同步化所有访问重要数据的实例变量;
c. 创建访问类变量的访问方法。
5. SingleThreadModel接口
1) 如果希望禁止多线程访问,可以让Servlet使用SingleThreadModel接口:
public class YourServlet extends HttpServlet implements SingleThreadModel{ ... }
2) 使用此接口,系统将保证不会存在多个请求线程同时访问Servlet的单个实例。
但是仍然需要同步对存储在Servlet外部的类变量或共享字段的访问。
3) 如Servlet频繁被访问,则Servlet访问的同步将严重影响性能(延时)。
6. destroy方法
1) 服务器决定删除已经加载的Servlet实例之前将调用Servlet的destroy方法;
2) 该方法允许Servlet:
a. 关闭数据库连接;
b. 中止后台线程;
c. 将Cookie程序清单或访问计数写到磁盘以及执行其他类似的收尾工作。
7. 在Servlet终止时处理Service线程
1) 在destroy()方法中:
如有服务(通过一个同步化的实例方法取得当前线程数大于0),则置关闭状态为true(通过一个同步化的实例方法实现)。
然后循环等待服务线程数为0.
2) 在Service()方法中: 如见关闭状态为true,便不执行具体逻辑方法,直接退出。