`
qq125922714
  • 浏览: 36025 次
社区版块
存档分类
最新评论

Servlet多线程

阅读更多

    ?

<div class="Section0">

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">?

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">?

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">[size=12.0000pt; font-family: '宋体';]Servlet采用多线程来处理多个请求同时访问,Servelet容器维护了一个线程池来服务请求。[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]线程池实际上是等待执行代码的一组线程叫做工作者线程(Worker?Thread),Servlet容器使用一个调度线程来管理工作者线程(Dispatcher?Thread)。[/size][size=12.0000pt; font-family: '宋体';][/size]

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">[size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]<span style="color: #ff0000;">二,Servlet容器默认采用单实例多线程的方式来处理请求,这样减少产生Servlet实例的开销,提升了对请求的响应时间。对于Tomcat可以在server.xml中通过<Connector>元素设置线程池中线程的数目。[/size][/size][size=12.0000pt; font-family: '宋体';]</span>

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">[size=12.0000pt; font-family: '宋体';]<span style="color: #ff0000;">三,如何开发线程安全的Servlet??[/size]???????????????????????????????????????????????????????????????????????????????????????????????????????????????[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]?1,变量的线程安全:这里的变量指字段和共享数据(如表单参数值)。[/size][size=12.0000pt; font-family: '宋体';]</span>

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">[size=12.0000pt; font-family: '宋体';]??b,使用同步块Synchronized,防止可能异步调用的代码块。这意味着线程需要排队处理。[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]??在使用同板块的时候要尽可能的缩小同步代码的范围,不要直接在sevice方法和响应方法上使用同步,这样会严重影响性能。[/size][size=12.0000pt; font-family: '宋体';][/size]

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">[size=12.0000pt; font-family: '宋体';]?2,属性的线程安全:ServletContext,HttpSession,ServletRequest对象中属性[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]??ServletContext:(线程是不安全的)[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]???ServletContext是可以多线程同时读/写属性的,线程是不安全的。要对属性的读写进行同步处理或者进行深度Clone()。[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]???所以在Servlet上下文中尽可能少量保存会被修改(写)的数据,可以采取其他方式在多个Servlet中共享,比方我们可以使用单例模式来处理共享数据。[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]??HttpSession:(线程是不安全的)[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]???HttpSession对象在用户会话期间存在,只能在处理属于同一个Session的请求的线程中被访问,因此Session对象的属性访问理论上是线程安全的。[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]???当用户打开多个同属于一个进程的浏览器窗口,在这些窗口的访问属于同一个Session,会出现多次请求,需要多个工作线程来处理请求,可能造成同时多线程读写属性。[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]???这时我们需要对属性的读写进行同步处理:使用同步块Synchronized和使用读/写器来解决。[/size][size=12.0000pt; font-family: '宋体';][/size]

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">[size=12.0000pt; font-family: '宋体';]?3,使用同步的集合类:[/size][size=12.0000pt; font-family: '宋体';]<br>[/size][size=12.0000pt; font-family: '宋体';]??使用Vector代替ArrayList,使用Hashtable代替HashMap。[/size][size=12.0000pt; font-family: '宋体';][/size]

<p class="p15" style="margin-bottom: 0pt; margin-top: 0pt;">[size=12.0000pt; font-family: '宋体';]?5,在多个servlet中对外部对象(比方文件)进行修改操作一定要加锁,做到互斥的访问。?[/size][size=12.0000pt; font-family: '宋体';][/size]


?

 
0
0
分享到:
评论

相关推荐

    servlet多线程

    ### servlet多线程详解 #### 一、Servlet容器如何同时处理多个请求 Servlet容器通过采用多线程机制来实现对多个请求的同时处理。这一过程主要依赖于容器内部维护的一个线程池,它由一系列处于待命状态的工作线程...

    1工作临时-servlet 多线程问题

    至于提供的文件"8点25分平安大厦集合旅游人员名单.xls",虽然与Servlet多线程问题无关,但可能是某个实际应用场景中涉及的数据或计划,比如用于统计并发访问的用户信息,或者是记录多线程处理过程中的某些状态信息。...

    Java_servlet多线程.pdf

    Java_servlet多线程.pdf

    servlet线程安全问题

    Servlet/JSP 技术由于其多线程运行而具有很高的执行效率,但这也意味着需要非常细致地考虑多线程的安全性问题。 Servlet 的多线程机制是建立在 Java 多线程机制之上的。Servlet 容器会自动使用线程池等技术来支持...

    Web-Servlet_多线程_

    本篇将深入探讨Servlet与多线程的关系,以及如何在Java Web环境中有效地利用多线程。 一、Servlet与多线程基础 Servlet是在Java平台上运行的服务器端组件,主要用于处理HTTP请求。当多个用户同时访问一个Servlet时...

    servlet与Struts action线程安全问题分析

    Servlet和Struts Action是两种常见的Java Web开发组件,它们在多线程环境下运行时可能存在线程安全问题。线程安全是指在多线程环境中,一个类或者方法能够正确处理多个线程的并发访问,保证数据的一致性和完整性。 ...

    servlet代码+说明文档

    4. **Servlet多线程**:Servlet容器通常会为每个请求创建一个新的线程,因此Servlet需要处理线程安全问题。在Servlet中,不要使用静态变量存储请求相关的数据,除非已经做好了同步控制。 5. **Servlet的转发和...

    tomcat中多线程对于servlet处理的4篇资料

    在这个主题中,我们将深入探讨"Tomcat中多线程对于Servlet处理"的相关知识点,特别关注在5.5.17版本中的实现。 1. **Tomcat的线程模型** Tomcat使用了一个基于Apache Commons Daemon的JVM服务模型,其中包含了...

    servlet-2.5-mrel-spec.rar

    5. **Servlet多线程模型**:Servlet 2.5默认采用多线程模型,一个Servlet实例可以服务于多个并发请求,提高了服务器性能。但这也要求开发者需要考虑线程安全问题。 6. **Filter过滤器**:过滤器允许在请求到达...

    深入java servlet 网络编程

    4. **Servlet多线程** 由于Servlet容器会为每个请求创建一个新的线程,因此Servlet必须是线程安全的。开发者需要注意同步访问共享资源,以避免线程安全问题。 5. **Servlet过滤器** 过滤器(Filter)是Servlet ...

    Servlet是线程不安全的1

    Servlet是一种线程不安全的组件,它的线程不安全性体现在多线程环境下共享一个实例变量,导致线程安全问题。下面我们将从Servlet的工作原理说起,详细解释Servlet接收和响应客户请求的过程,并探讨Servlet线程不安全...

    Servlet 工作原理解析

    5. **Servlet多线程** 由于Servlet容器通常会为每个请求创建一个新的线程,因此Servlet是线程安全的。开发者需要确保在Servlet中处理的任何共享数据都正确地同步,以避免线程安全问题。 6. **Servlet的异步处理** ...

    精华servlet学习例子

    五、Servlet多线程问题 由于Servlet容器通常会为每个请求创建一个新的线程来执行Servlet,所以需要注意线程安全问题。若Servlet内部有共享数据,需使用同步机制,避免数据冲突。 六、Filter与Listener Servlet学习...

Global site tag (gtag.js) - Google Analytics