j2ee的线程安全-threadlocal

j2ee的线程安全-threadlocal

ID:8795634

大小:139.50 KB

页数:9页

时间:2018-04-08

j2ee的线程安全-threadlocal_第1页
j2ee的线程安全-threadlocal_第2页
j2ee的线程安全-threadlocal_第3页
j2ee的线程安全-threadlocal_第4页
j2ee的线程安全-threadlocal_第5页
资源描述:

《j2ee的线程安全-threadlocal》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、J2EE的线程安全-ThreadLocal1.在用Servlet时,我们都知道Servlet只会被初始化一次,只有一个实例。2.在Struts1中,ActionServlet也仅是初始化一次,也是单实例。为什么会这样,无非是为了提高效率。但是线程安全不容忽视。但是在WebWork、Struts2却做好了线程安全。下面具体介绍:Servlet线程安全概述在探讨java线程安全前,让我们先简要介绍一下Java语言。任何语言,如C++,C#,Java,它们都有相通之处,特别是语法,但如果有人问你,Java语言的核心是什么?类库?关键字?语法?似乎都

2、不是。Java语言的核心,也就是Sun始终不愿意开源的东西:Java虚拟机的实现(不过sun公开了其Java虚拟机规范),也就有了BEA的JRockit,IBM的Jikes,Sun的Hotspot。Java的核心有两点,Java类加载(JavaClassLoader)和Java内存管理,它们具体体现在Java类库的以下几个类:java.lang.ClassLoader(java.lang.Class):我们调用的类,包括其接口和超类,import的类是怎么被Java虚拟机载入的?为什么static的字段在servlet容器里面可以一直生存下去

3、(Spring容器中)?java.lang.Thread(java.lang.ThreadLocal):垃圾回收是怎么进行的(垃圾回收线程)?我们的程序是怎么退出的?java.lang.refelect.Proxy(java.lang.refelect.Method):为什么Tomcat、Tapestry、Webwork、Spring等容器和框架可以通过配置文件来调用我们写的类?Servlet规范、JSF规范、EJB规范、JDBC规范究竟是怎么回事?为什么它们几乎都是一些接口,而不是具体类?Servlet线程安全在Java的serversid

4、e开发过程中,线程安全(ThreadSafe)是一个尤为突出的问题。因为容器,如Servlet、EJB等一般都是多线程运行的。虽然在开发过程中,我们一般不考虑这些问题,但诊断问题(Robust),程序优化(Performance),我们必须深入它们。什么是线程安全?Thread-safedescribesaprogramportionorroutinethatcanbecalledfrommultipleprogrammingthreadswithoutunwantedinteractionbetweenthethreads。在Java里,线

5、程安全一般体现在两个方面:1.多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如ArrayList和Vector,HashMap和Hashtable(后者每个方法前都有synchronized关键字)。如果你在interator一个List对象时,其它线程remove一个element,问题就出现了。2.每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transi

6、ent那样。一个普遍的疑问,我们的Servlet中能够像JavaBean那样declareinstance或static字段吗?如果不可以?会引发什么问题?答案是:不可以。我们下面以实例讲解:首先,我们写一个普通的Servlet,里面有instance字段count:Java代码1publicclassSimpleServletextendsHttpServlet{2//AvariablethatisNOTthread-safe!3privateintcounter=0;45publicvoiddoGet(HttpServletRequest

7、req,HttpServletResponseresp)6throwsServletException,IOException{7doPost(req,resp);8}910publicvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)11throwsServletException,IOException{12resp.getWriter().println("");13resp.getWriter().println(this+"==>");14res

8、p.getWriter().println(Thread.currentThread()+":
");1516for(intc=0;c<10;c++){17r

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。