首页 理论教育JavaWeb应用开发:Servlet多线程机制

JavaWeb应用开发:Servlet多线程机制

【摘要】:Servlet 体系结构是建立在Java 多线程机制之上的,它的生命周期是由Web 容器负责管理的。当有新的客户端请求该Servlet 时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Servlet 容器会自动使用线程池等技术来支持系统的运行。图3.24调度者线程选取一个工作者线程来服务请求但是,当两个或多个线程同时访问同一个Servlet 时,可能会发生多个线程同时访问同一Servlet 的情况,如图3.25 所示。图3.25两个工作者线程同时执行一个Servlet 的service()方法

Servlet 体系结构是建立在Java 多线程机制之上的,它的生命周期是由Web 容器负责管理的。

当客户端第一次请求某个Servlet 时,Servlet 容器将会根据web.xml 配置文件实例化这个Servlet 类。当有新的客户端请求该Servlet 时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。Servlet 容器会自动使用线程池等技术来支持系统的运行。线程池实际上是等待执行代码的一组线程,这些线程叫做工作者线程(Worker Thread)。Servlet 容器使用一个调度者线程(Dispatcher Thread)来管理工作者线程。

如图3.24 所示,当Servlet 容器接收到一个访问Servlet 的请求,调度者线程从线程池中选取一个工作者线程,将请求传递给该线程,然后由这个线程执行Servlet 的service()方法。

图3.24 调度者线程选取一个工作者线程来服务请求(www.chuimin.cn)

但是,当两个或多个线程同时访问同一个Servlet 时,可能会发生多个线程同时访问同一Servlet 的情况,如图3.25 所示。那么这个Servlet 的service()方法将在多个线程中并发的执行,若这样数据可能会变得不一致。所以在用Servlet 构建的Web应用程序时如果不注意线程安全的问题,会使所写的Servlet 程序有难以发现的错误。

图3.25 两个工作者线程同时执行一个Servlet 的service()方法