欢迎来到天天文库
浏览记录
ID:8795634
大小:139.50 KB
页数:9页
时间:2018-04-08
《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("
8、p.getWriter().println(Thread.currentThread()+":");1516for(intc=0;c<10;c++){17r
此文档下载收益归作者所有