美文网首页
servlet的生命周期以及线程安全

servlet的生命周期以及线程安全

作者: 北你妹的风 | 来源:发表于2017-03-10 11:53 被阅读35次

servlet的生命周期很简单,需要注意的是,servlet是单例的,即servlet容器只会保留一个servlet的实例。客户端发起http请求时,servlet容器找到对应的servlet,如过容器有该servlet的实例,就会重新启动一个线程,去执行servlet。如过没有实例,就会创建该servlet的实例,这期间会调用servlet的init方法,也就是说,servlet的init方法在其生命周期内只会被调用一次。

那么问题来了,serlvet是单例的,是否是线程安全的呢?

答案是否定的,如果servlet中用到实例变量的话,在高并发的情况下,会引起共享数据的问题。

如何解决呢?

1.实现SingleThreadModel协议,这种方式会对每一次请求都生成一个实例,导致性能下降,不推荐使用

2.对实例变量加锁,这虽然能解决多线程数据共享的问题,但会引起其他线程阻塞,降低系统的吞吐量

3.不使用实例变量。这是最根本的解决办法,推荐使用。

相关文章

网友评论

      本文标题:servlet的生命周期以及线程安全

      本文链接:https://www.haomeiwen.com/subject/kdmngttx.html