描述Servlet生命周期,Servlet是线程安全的吗? 为什么?

Servlet是在服务器端运行的Java程序,可以接收客户端请求并且做出响应。

Servlet的生命周期

1.实例化,Servlet容器创建Servlet实例

2.初始化,该容器调用init(ServletConfig())方法

3.服务,如果请求Servlet,则容器调用service()方法

4.销毁,销毁实例之前调用destory()方法

Servlet是线程不安全的:

    容器在项目创建时创建,一个项目只有一个容器,在项目重启或者关闭时销毁。每构建一个Servlet只会有唯一一个对象(单例)即容器是单例的,ServletContent里放的是servlet对象。

   项目启动时,tomcat提供了所有的对象,且都是单例的。

   默认情况下,Servlet容器对每个Servlet只实例化一次。Servlet容器维护一个线程池服务请求,当容器收到一个访问Servlet的请求时,就会从线程池中选一个线程,把请求传递给这个线程,由这个线程调度Servlet的方法。

   所以在默认情况下,Servlet是多线程的,一个Servlet实例同时在多个线程中执行,并发地处理多个客户端请求。因为Servlet是多线程的,所以开发Servlet时必须注意线程安全。Servlet线程的安全有两个问题,一个是变量的线程安全,局部变量总是线程安全的,实例变量和类变量不是线程安全的。另一个是属性的线程安全,请求对象的属性访问是线程安全的,而session对象和上下文的属性访问不是线程安全的
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值