Servlet的多线程和线程安全

Servlet的多线程和线程安全

Servlet的生命周期

1.Servlet的生命周期有四个阶段:加载并实例化、初始化、请求处理、销毁。

加载并实例化

1.Servlet容器(如:Tomcat)负责加载和实例化Servelt。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。

2.当Servlet容器启动后,Servlet容器通过类加载器来加载Servlet类,加载完成后再new一个Servlet对象来完成实例化。

初始化

1.在Servlet实例化之后,容器将调用init()方法,并传递实现ServletConfig接口的对象。

2.在init()方法中,Servlet可以部署描述符中读取配置参数,或者执行任何其他一次性活动。在Servlet的整个生命周期类,init()方法只被调用一次。

请求处理

1.当Servlet初始化后,容器就可以准备处理客户机请求了。

2.当容器收到对这一Servlet的请求,就调用Servlet的service()方法,并创建HttpSevletRequest和HttpServletResponse对象作为参数传递。

3.当并行的请求到来时,多个service()方法能够同时运行在独立的线程中。通过分析ServletRequest或者HttpServletRequest对象,service()方法处理用户的请求,并调用ServletResponse或者HttpServletResponse对象来响应。

销毁

1.一旦Servlet容器检测到一个Servlet要被卸载,这可能是因为要回收资源或者因为它正在被关闭,容器会在所有Servlet的service()线程之后,调用Servlet的destroy()方法。

Servlet是线程安全的吗?

1.Servlet本身是无状态的,一个无状态的Servlet是绝对线程安全的,无状态对象设计也是解决线程安全问题的一种有效手段。

2.servlet是否线程安全是由它的实现来决定的,如果它内部的属性或方法会被多个线程改变,它就是线程不安全的,反之,就是线程安全的。

3.Servlet如果没有共享数据的访问就是线程安全

相关推荐