??xml version="1.0" encoding="utf-8" standalone="yes"?>在线观看av网站永久,视频三区二区一区,日韩av官网http://www.aygfsteel.com/yeping573/zh-cnTue, 17 Jun 2025 10:15:57 GMTTue, 17 Jun 2025 10:15:57 GMT60关于多线E的问题 高手指点http://www.aygfsteel.com/yeping573/archive/2009/04/24/267361.html王业q?/dc:creator>王业q?/author>Fri, 24 Apr 2009 07:04:00 GMThttp://www.aygfsteel.com/yeping573/archive/2009/04/24/267361.htmlhttp://www.aygfsteel.com/yeping573/comments/267361.htmlhttp://www.aygfsteel.com/yeping573/archive/2009/04/24/267361.html#Feedback6http://www.aygfsteel.com/yeping573/comments/commentRss/267361.htmlhttp://www.aygfsteel.com/yeping573/services/trackbacks/267361.html此时E序中最多有几个存活的线E,个h认ؓ应该?个,怎么是看不到是4个的l果呢?
package Test;

public class Testthread{
     public static void main(String[] args){

      //定当前zd的线E数?肯定有一?span style="color: #0000ff">ȝE?/strong>
在运?br />       System.out.println("=========header========"+Thread.activeCount());
      ThreadTest tt=new ThreadTest();  
      RunTest rt=new RunTest();
//在下面新建线E里被启?/strong>

      new Thread(rt).start();      //新徏立的一个线E?启动
      tt.start();                        //已经建立的线E?nbsp;启动
      System.out.println("===========footer======"+Thread.activeCount());
 }
}
class ThreadTest extends Thread{
 public void run(){
  System.out.println("==========I'm over thread=========");
 }
}

class RunTest implements Runnable{
 public void run(){
  System.out.println("==========I'm over runnable==========");
 }
}


打印l果Q?br /> W一cȝ?Q次序有时不同)
=========header========1
===========footer======3
==========I'm over thread=========
==========I'm over runnable==========

W二cȝ?br /> =========header========1
==========I'm over runnable==========
===========footer======2
==========I'm over thread=========




]]>
servlet 生命周期 卛_作流E?/title><link>http://www.aygfsteel.com/yeping573/archive/2009/04/24/267289.html</link><dc:creator>王业q?/dc:creator><author>王业q?/author><pubDate>Fri, 24 Apr 2009 02:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/yeping573/archive/2009/04/24/267289.html</guid><wfw:comment>http://www.aygfsteel.com/yeping573/comments/267289.html</wfw:comment><comments>http://www.aygfsteel.com/yeping573/archive/2009/04/24/267289.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yeping573/comments/commentRss/267289.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yeping573/services/trackbacks/267289.html</trackback:ping><description><![CDATA[<span style="color: #800000; font-family: 楷体_GB2312"><strong>Servlet的生命周期:<br /> <br /> Q?Q装载Servlet。这Ҏ作一般是动态执行的。然而,Server通常会提供一个管理的选项Q用于在Server启动时强制装载和初始化特定的ServletQ?br /> <br /> Q?QServer创徏一个Servlet的实例;<br /> <br /> Q?QServer调用Servlet的init()ҎQ?br /> <br /> Q?Q一个客L的请求到达ServerQ?br /> <br /> Q?QServer创徏一个请求对象;<br /> <br /> Q?QServer创徏一个响应对象;<br /> <br /> Q?QServerȀzServlet的service()ҎQ传递请求和响应对象作ؓ参数Q?br /> <br /> Q?Qservice()Ҏ获得关于h对象的信息,处理hQ访问其他资源,获得需要的信息Q?br /> <br /> Q?0Qservice()Ҏ使用响应对象的方法,响应传回Server、最l到辑֮L?br /> <br /> service()Ҏ可能Ȁzd它方法以处理hQ如doGet()或doPost()或程序员自己开发的新的ҎQ?br /> <br /> 对于更多的客LhQServer创徏新的h和响应对象,仍然ȀzLServlet的service()ҎQ将q两个对象作为参C递给它。如此重复以上的循环Q但无需再次调用init()Ҏ。一般Servlet只初始化一ơ;<br /> <br /> 当Server不再需要ServletӞServer调用Servlet的Destroy()Ҏ?br /> </strong></span> <img src ="http://www.aygfsteel.com/yeping573/aggbug/267289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yeping573/" target="_blank">王业q?/a> 2009-04-24 10:13 <a href="http://www.aygfsteel.com/yeping573/archive/2009/04/24/267289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转帖 servlet的线E安全问?/title><link>http://www.aygfsteel.com/yeping573/archive/2009/04/23/267180.html</link><dc:creator>王业q?/dc:creator><author>王业q?/author><pubDate>Thu, 23 Apr 2009 08:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/yeping573/archive/2009/04/23/267180.html</guid><wfw:comment>http://www.aygfsteel.com/yeping573/comments/267180.html</wfw:comment><comments>http://www.aygfsteel.com/yeping573/archive/2009/04/23/267180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yeping573/comments/commentRss/267180.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yeping573/services/trackbacks/267180.html</trackback:ping><description><![CDATA[<span style="font-family: 楷体_GB2312">不知如何转帖Q只有ctrl +v?br /> </span> <h4 class="c_tx"><span style="font-family: 楷体_GB2312">ServletU程安全探讨</span></h4> <div id="wmqeeuq" class="art_info c_tx2"><span style="font-family: 楷体_GB2312"><span id="wmqeeuq" class="right">阅读(<span id="wmqeeuq" class="hit" id="viewCount3">67</span>) <span id="wmqeeuq" class="spl">评论(<span id="wmqeeuq" class="hit" id="commentCount3">0</span>)</span></span> 发表旉Q?008q?1?0?15:46 </span> <p><span style="font-family: 楷体_GB2312">本文地址Q?/span><a style="cursor: pointer" onclick="copyBlogURL();return false;" href="javascript:;"><span style="font-family: 楷体_GB2312">http://qzone.qq.com/blog/190658200-1227167200 </span></a></p> <div id="wmqeeuq" class="tags bor2"><span style="font-family: 楷体_GB2312">本文标签: </span><a target="_blank"><span style="font-family: 楷体_GB2312">Servlet</span></a><span style="font-family: 楷体_GB2312"> </span><a target="_blank"><span style="font-family: 楷体_GB2312">U程安全</span></a></div> <div class="wmqeeuq" id="quoteinfo" style="margin-bottom: 10px"></div> <div class="wmqeeuq" id="voteAnchor"></div> </div> <!--文章内容开?-> <div id="wmqeeuq" class="real_blog" id="veryContent" style="text-indent: 2em; line-height: 26px; height: auto! important"> <table id="blogContentTable" style="table-layout: fixed; width: 100%; position: relative" cellspacing="0" cellpadding="0"> <tbody> <tr> <td style="word-wrap: break-word" valign="top"> <div class="wmqeeuq" id="blogContainer"><span style="font-family: 楷体_GB2312"><img id="paperPicArea0" style="display: none" height="1" alt="" src="http://qzone.qq.com/ac/b.gif" width="1" /> </span> <div class="wmqeeuq" id="paperTitleArea" align="center"></div> <span style="font-family: 楷体_GB2312"><img id="paperPicArea" style="display: none" height="1" alt="" src="http://qzone.qq.com/ac/b.gif" width="1" /> </span> <div class="wmqeeuq" id="blogDetailDiv" style="font-size: 16px"><span style="font-family: 楷体_GB2312">我们在开?font style="line-height: 1.5em" size="3">JAVA WEB</font><wbr>应用E序Q大多都会考虑?font style="line-height: 1.5em" size="3">MVC</font><wbr>模式的框架来部vQ相信没有程序员再考虑前两者简单的模式了吧。)Q这也是Z下面的原因:<br /> <font style="line-height: 1.5em" size="3">一、MVC</font><wbr>׃分层清晰Q容易看到整个系l流E的架构Q对于越来越复杂的系l是有相当大的帮助?br /> <font style="line-height: 1.5em" size="3">二?</font><wbr>扩展性,耦合性低。各层媄响相当少Q如<font style="line-height: 1.5em" size="3">JSP</font><wbr>面只负责数据显C,<font style="line-height: 1.5em" size="3">M</font><wbr>负责业务逻辑处理Q?font style="line-height: 1.5em" size="3">C</font><wbr>相当?font style="line-height: 1.5em" size="3">Servlet</font><wbr>来控制流E的转向。等{这一pd的好处?br /> <span style="color: red"><strong>?font style="line-height: 1.5em" size="3">MVC</font><wbr>的模式,其本质就是用<font style="line-height: 1.5em" size="3">Servlet</font><wbr>的应用技?/strong></span>?font style="line-height: 1.5em" size="3">Servlet/jsp</font><wbr>和其他如<font style="line-height: 1.5em" size="3">ASP\PHP</font><wbr>语言相比Q由于用了多线E运行技术与h很高的执行效率。但是也是<font style="line-height: 1.5em" size="3">Servlet</font><wbr>׃默认多线E模式执行,依我们所了解U程安全性问题,也就不得不要考虑?font style="line-height: 1.5em" size="3">Servlet</font><wbr>中也存在q样的问题,然而,很多E序员只专注于业务逻辑的处理,q没有注意到多线E的安全性的问题Q在此编写之前,我也存在q样的经历,不过q好。。。。)Q这往往造成~写的程序在用户量少的时候没Z么问题,而一旦发现大量的q发用户Ӟ而且q数量达C定的数量Ӟ׃出现一pd莫名的问题,q问题在下面我们可以看的到?br /> <strong style="color: red"><font style="line-height: 1.5em" size="3">Servlet</font><wbr></strong><wbr>的多U程机制</strong>是怎么L呢:</strong><wbr><br /> <font style="line-height: 1.5em" size="3">Servlet</font><wbr>体系l构是徏立在<font style="line-height: 1.5em" size="3">JAVA</font><wbr>的多U程机制上的Q但它的生命周期是由<font style="line-height: 1.5em" size="3">WEB</font><wbr>容器来管理的Q当客户端第一ơ请求某?font style="line-height: 1.5em" size="3">Servlet</font><wbr>Ӟ<font style="line-height: 1.5em" size="3">Servlet</font><wbr>容器会根?font style="line-height: 1.5em" size="3">web.xml</font><wbr>的配|实例化相应?font style="line-height: 1.5em" size="3">Servlet</font><wbr>c,当有新的客户端来hq个<font style="line-height: 1.5em" size="3">Servlet</font><wbr>Ӟ容器一般不会再实例化这?font style="line-height: 1.5em" size="3">Servlet</font><wbr>c,而是以线E方式去调用q个实例的方法,然后再有更多的客L来请求时Q就存在了多个线E在使用q个实例。ƈ?strong style="color: #008000"><font style="line-height: 1.5em" size="3">Servlet</font><wbr>容器会自动用线E池技术来支持pȝ的运行?br /> </strong>在这L情况Q当两个或者多个客L同时h同一<font style="line-height: 1.5em" size="3">Serlvet</font><wbr>Ӟ׃存在多个U程同时讉K同一资源的情况,数据可能变的不一_所以在?font style="line-height: 1.5em" size="3">Servlet</font><wbr>搭徏<font style="line-height: 1.5em" size="3">WEB</font><wbr>应用E序时如果不考虑U程的问题,׃出现难以发现的问题?br /> <font style="line-height: 1.5em" size="3">Servlet</font><wbr></strong><wbr>U程安全问题的例子:</strong><wbr><br /> <font style="line-height: 1.5em" size="3">Servlet</font><wbr>U程是由于用实例变量不当而导致的Q这里有如下的例子:<br /> 代码E序如下Q?br /> <wbr><span style="font-family: Comic Sans MS">public<wbr style="font-family: "> <wbr style="font-family: ">class<wbr style="font-family: "> SecurityTest <wbr style="font-family: ">extends<wbr style="font-family: "> HttpServlet {<br style="font-family: " />     <span style="color: #ff6600; font-family: ">PrintWriter output;<span style="color: #0000ff; font-family: ">//成员变量</span></span><br style="font-family: " /> <br style="font-family: " />     @Override<br style="font-family: " />     <wbr style="font-family: ">protected<wbr style="font-family: "> <wbr style="font-family: ">void<wbr style="font-family: "> service(HttpServletRequest request,<br style="font-family: " />            <wbr style="font-family: ">HttpServletResponse<wbr style="font-family: "> response) <wbr style="font-family: ">throws<wbr style="font-family: "> ServletException, <br style="font-family: " /> IOException {<br style="font-family: " />        response.setContentType("text/html;charset=gb2312");<br style="font-family: " />        String name = request.getParameter("name");<br style="font-family: " />        output=response.getWriter();<br style="font-family: " />        <wbr style="font-family: ">try<wbr style="font-family: "> {<br style="font-family: " />            Thread.<em style="font-family: "><wbr style="font-family: ">sleep</em><wbr style="font-family: ">(5000);<br style="font-family: " />        } <wbr style="font-family: ">catch<wbr style="font-family: "> (InterruptedException e) {<br style="font-family: " />            e.printStackTrace();<br style="font-family: " />        }<br style="font-family: " />        <span style="color: #ff6600">output.write(name);<br style="font-family: " /> </span>    }<br style="font-family: " /> <br style="font-family: " /> }</span><br /> 该实例中定义了一个实例变?font style="line-height: 1.5em" size="3">output</font><wbr>Q在<font style="line-height: 1.5em" size="3">service</font><wbr>Ҏ中负责输出用户名Q当一个用戯问该<font style="line-height: 1.5em" size="3">Servlet</font><wbr>ӞE序会正常的q行Q但当多个用户ƈ发的讉KӞ可能会出现其他的用户信息显C在另一个用L览器上的问题,Z看到实际的效果,在这个程序中Q我特做如下的处理:是延时<font style="line-height: 1.5em" size="3">5000</font><wbr>毫秒Q让W一个用h停在输出数据前。然后我们马上发起另一个请求,q种情况下就会出现如下的面<br /> W一ơ请求:<wbr></span><a target="_blank"><span style="font-family: 楷体_GB2312">http://127.0.0.1:8080/Test2/securityTest?name=a</span><wbr></a><wbr><br /> <br /> <span style="font-family: 楷体_GB2312">大家看到q页面什么数据也没有Q就是说那姓名没有打印出来,那跑到哪里去了呢Q看W二个用戯求的情况?br /> W二个用戯求地址Q?font style="line-height: 1.5em" size="3">http://127.0.0.1:8080/Test2/securityTest?name=b</font><wbr><br /> <br /> 可以看到Q原?font style="line-height: 1.5em" size="3">a</font><wbr>值已l打印到W二个用L览器了?br /> 可以惛_在暂?font style="line-height: 1.5em" size="3">5000</font><wbr>旉里,W二个用戯求这?font style="line-height: 1.5em" size="3">servlet</font><wbr>Q已l把<font style="line-height: 1.5em" size="3">output</font><wbr>的引用变成了W二个用戯求的<font style="line-height: 1.5em" size="3">output</font><wbr>gQ这样就解释了ؓ什么会输出到第二个客户端的览的原因?br /> <br /> 从内存模型来?font style="line-height: 1.5em" size="3">Servlet</font><wbr>的线E安全问?span style="color: #0000ff">//不是很理解这一D?br /> </span><font style="line-height: 1.5em" size="3">   JAVA</font><wbr>的内存模?font style="line-height: 1.5em" size="3">JMM(JAVA Memory Model)</font><wbr>主要是ؓ了规定线E与内存的一些关p,既然<font style="line-height: 1.5em" size="3">Servlet</font><wbr>也是用线E技术,那么我们也从q方面寻找根本原因,Ҏ<font style="line-height: 1.5em" size="3">JMM</font><wbr>Q系l存在有d存,<font style="line-height: 1.5em" size="3">JAVA</font><wbr>的实例变量(是cd量吧Q都是存在于d存供其他内存使用Q也是Ҏ有的U程都是׃n的,而根据线E的特点Q它是有自己的工作内存的Q工作内存包括缓存和堆栈两部分,堆栈是专门用来存在方法中的局部变量的Q而缓存则是主内存中变量的拯Q缓存与d存ƈ不L同步的,也就是缓存中的变量的修改可能没有立刻写到d中,如下图:<br /> <br /> Ҏ内存模型Q我们可以得到如下的U程调度表:<br /> </span> <center><span style="font-family: 楷体_GB2312">调度时刻</span></center><wbr> <center><span style="font-family: 楷体_GB2312"><font style="line-height: 1.5em" size="3">a</font><wbr>U程</span></center><wbr> <center><span style="font-family: 楷体_GB2312"><font style="line-height: 1.5em" size="3">b</font><wbr>U程</span></center><wbr> <center><span style="font-family: 楷体_GB2312">T1</span><wbr></center><wbr> <center><span style="font-family: 楷体_GB2312">讉K<font style="line-height: 1.5em" size="3">Servlet</font><wbr>面</span></center><wbr> <center></center><wbr> <center><span style="font-family: 楷体_GB2312">T2 </span><wbr></center><wbr> <center></center><wbr> <center><span style="font-family: 楷体_GB2312">讉K<font style="line-height: 1.5em" size="3">Servlet</font><wbr>面</span></center><wbr> <center><span style="font-family: 楷体_GB2312">T3 </span><wbr></center><wbr> <center><span style="font-family: 楷体_GB2312"><font style="line-height: 1.5em" size="3">output=a</font><wbr>的输?font style="line-height: 1.5em" size="3">username=a</font><wbr>休眠<font style="line-height: 1.5em" size="3">5000</font><wbr>毫秒Q让?font style="line-height: 1.5em" size="3">CPU </font><wbr></span></center><wbr> <center></center><wbr> <center><span style="font-family: 楷体_GB2312">T4 </span><wbr></center><wbr> <center></center><wbr> <center><span style="font-family: 楷体_GB2312"><font style="line-height: 1.5em" size="3">output=b</font><wbr>的输出(写回dQ?font style="line-height: 1.5em" size="3">username=b</font><wbr>休眠<font style="line-height: 1.5em" size="3">5000</font><wbr>毫秒Q让?font style="line-height: 1.5em" size="3">CPU</font><wbr></span></center><wbr> <center><span style="font-family: 楷体_GB2312">T5 </span><wbr></center><wbr> <center><span style="font-family: 楷体_GB2312">在用?font style="line-height: 1.5em" size="3">b</font><wbr>的浏览器上输?font style="line-height: 1.5em" size="3">a</font><wbr>U程?font style="line-height: 1.5em" size="3">username</font><wbr>的?font style="line-height: 1.5em" size="3">,a</font><wbr>U程l止?/span></center><wbr> <center></center><wbr> <center><span style="font-family: 楷体_GB2312">T6</span><wbr></center><wbr> <center></center><wbr> <center><span style="font-family: 楷体_GB2312">在用?font style="line-height: 1.5em" size="3">b</font><wbr>的浏览器上输?font style="line-height: 1.5em" size="3">b</font><wbr>U程?font style="line-height: 1.5em" size="3">username</font><wbr>的?font style="line-height: 1.5em" size="3">,b</font><wbr>U程l止?/span></center><wbr><br /> <span style="font-family: 楷体_GB2312">可以看出Q由?font style="line-height: 1.5em" size="3">b</font><wbr>U程对实例变?font style="line-height: 1.5em" size="3">output</font><wbr>的修改覆盖了<font style="line-height: 1.5em" size="3">a</font><wbr>U程对实例变?font style="line-height: 1.5em" size="3">output</font><wbr>的|直接D了用?font style="line-height: 1.5em" size="3">a</font><wbr>的信息显C到<font style="line-height: 1.5em" size="3">b</font><wbr>的浏览器上。根据内存模型,我们也可以解释到Q正是因?font style="line-height: 1.5em" size="3">b</font><wbr>开始时修改了缓存中?font style="line-height: 1.5em" size="3">output</font><wbr>|然后hC内存中,而又有够的旉h?font style="line-height: 1.5em" size="3">a</font><wbr>~存中,q时<font style="line-height: 1.5em" size="3">a</font><wbr>?font style="line-height: 1.5em" size="3">Output</font><wbr>值就直接D了指?font style="line-height: 1.5em" size="3">b</font><wbr>览器?br /> 解决ҎQ?/strong><wbr><br /> 从上面的分析中,我们知道DU程不安全的主要原因在于实例变量的用不当,下面提出如下三U解x?br /> <font style="line-height: 1.5em" size="3"><span style="color: #ff0000"><font style="line-height: 1.5em" size="3">W一Q?/font><wbr>?font style="line-height: 1.5em" size="3">Servlet</font><wbr>cd?font style="line-height: 1.5em" size="3">SingleThreadModel</font><wbr>接口</span></font>Q该接口指定pȝ如何处理对同一?font style="line-height: 1.5em" size="3">Servlet</font><wbr>的调用,如果一?font style="line-height: 1.5em" size="3">Servlet</font><wbr>被指定实现这个接口,那么Q在q个<font style="line-height: 1.5em" size="3">Servlet</font><wbr>中的<font style="line-height: 1.5em" size="3">service</font><wbr>Ҏ不会在两个U程中同时执行,也就是说执行完一个后再执行下一个请求的<font style="line-height: 1.5em" size="3">service</font><wbr>Q当然也׃存在U程不安全的问题了?br /> 代码如下Q?br /> <strong><wbr>public</strong><wbr> <strong><wbr>class</strong><wbr> SecurityTest <strong><wbr>extends</strong><wbr> HttpServlet implements SingleThreadModel{}<br /> 其实q方法也q当于是同步方法的效果吧?br /> <br /> <span style="color: #ff0000">W二Q同步对׃n数据的操?/span>。我们所熟悉的就是用<font style="line-height: 1.5em" size="3">synchronized</font><wbr>关键字,q样能保证一ơ只有一个线E来操作被保护的区段。在本例子也可以?font style="line-height: 1.5em" size="3">synchronized</font><wbr>来保证线E的安全Q代码如下:<br /> <wbr><span style="font-family: Comic Sans MS">public<wbr style="font-family: "> <wbr style="font-family: ">class<wbr style="font-family: "> SecurityTest <wbr style="font-family: ">extends<wbr style="font-family: "> HttpServlet {<br style="font-family: " />     PrintWriter output;<br style="font-family: " /> <br style="font-family: " />     @Override<br style="font-family: " />     <wbr style="font-family: ">protected<wbr style="font-family: "> <wbr style="font-family: ">void<wbr style="font-family: "> service(HttpServletRequest request,<br style="font-family: " />            <u style="font-family: "><wbr style="font-family: ">HttpServletResponse</u><wbr style="font-family: "> response) <wbr style="font-family: ">throws<wbr style="font-family: "> ServletException, IOException {<br style="font-family: " />        response.setContentType("text/html;charset=gb2312");<br style="font-family: " />        String name = request.getParameter("name");</span><br /> <span style="color: #ff0000">Synchronized(this){</span><br />        <span style="font-family: Comic Sans MS">output=response.getWriter();<br style="font-family: " />        <wbr style="font-family: ">try<wbr style="font-family: "> {<br style="font-family: " />            Thread.<em style="font-family: "><wbr style="font-family: ">sleep</em><wbr style="font-family: ">(5000);<br style="font-family: " />        } <wbr style="font-family: ">catch<wbr style="font-family: "> (InterruptedException e) {<br style="font-family: " />            e.printStackTrace();<br style="font-family: " />        }<br style="font-family: " />        output.write(name);<br style="font-family: " /> </span><span style="color: #ff0000">}<br /> </span>    }}<br /> <span style="color: #ff0000"><strong>W三Q避免用实例变量,而用局部变量?/strong></span>因ؓServletU程不安全的原因是由实例变量引vQ所以我们可以避免用实例变量,而用局部变量,U程之间很难直接讉K局部变?Q这样就从根本上解决了这一问题?br /> 在本例子中,是output攑֜serviceҎ中当局部变??br /> <wbr><span style="font-family: Comic Sans MS">public<wbr style="font-family: "> <wbr style="font-family: ">class<wbr style="font-family: "> SecurityTest <wbr style="font-family: ">extends<wbr style="font-family: "> HttpServlet {<br style="font-family: " /> <br style="font-family: " />     @Override<br style="font-family: " />     <wbr style="font-family: ">protected<wbr style="font-family: "> <wbr style="font-family: ">void<wbr style="font-family: "> service(HttpServletRequest request,<br style="font-family: " />            HttpServletResponse response) <wbr style="font-family: ">throws<wbr style="font-family: "> ServletException, IOException {<br style="font-family: " /> <span style="color: #ff6600">        PrintWriter output;<br style="font-family: " /> </span>       response.setContentType("text/html;charset=gb2312");<br style="font-family: " />        String name = request.getParameter("name");<br style="font-family: " />        output=response.getWriter();<br style="font-family: " />        <wbr style="font-family: ">try<wbr style="font-family: "> {<br style="font-family: " />            Thread.<em style="font-family: "><wbr style="font-family: ">sleep</em><wbr style="font-family: ">(5000);<br style="font-family: " />        } <wbr style="font-family: ">catch<wbr style="font-family: "> (InterruptedException e) {<br style="font-family: " />            e.printStackTrace();<br style="font-family: " />        }<br style="font-family: " />       <span style="color: #ff6600"> output.write(name);</span><br style="font-family: " />     }<font style="line-height: 1.5em; font-family: " size="3">}</font></span><wbr><br /> q三U方法都对解决servletU程安全起到很好的作用,但我们如果对他们q行比较一下,看哪一U更适合呢:<br /> W一个方案中Q实现SingleThreadModel接口QServlet引擎ؓ每个客户h都生成一个Servlet实例Q这引起大量的pȝ开销Q在新版本的Servlet2.4中也不提倡用了?br /> W二个方案中Q在E序中用同步来保护要用的׃n数据Q也使系l的性能大大的下降,q是因ؓ被同步的代码在同一时刻只能׃个线E来执行Q得同时处理其他客戯求的吞吐量大大降低,大量客户处于d状态,q对于ƈ发用戯求来说ƈ非是一件很好的事情。另外ؓ了保持主内存与工作内存数据的一致性要频繁地刷新缓存,q也大大降低了系l性能Q所以这U方案不大可取?br /> <span style="color: #008000"><strong>W三个方案则应该是最优方案:从JAVA内存模型来看Q方法中的时变量都是在栈中分配I间Q而每个线E都有自qU有栈空_互不q扰Q不会媄响性能Q也不会产生U程安全的问题?/strong></span></span></div> </div> </td> </tr> </tbody> </table> </div> <img src ="http://www.aygfsteel.com/yeping573/aggbug/267180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yeping573/" target="_blank">王业q?/a> 2009-04-23 16:31 <a href="http://www.aygfsteel.com/yeping573/archive/2009/04/23/267180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于FileFilter使用的一点心?/title><link>http://www.aygfsteel.com/yeping573/archive/2009/04/23/267131.html</link><dc:creator>王业q?/dc:creator><author>王业q?/author><pubDate>Thu, 23 Apr 2009 05:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/yeping573/archive/2009/04/23/267131.html</guid><wfw:comment>http://www.aygfsteel.com/yeping573/comments/267131.html</wfw:comment><comments>http://www.aygfsteel.com/yeping573/archive/2009/04/23/267131.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.aygfsteel.com/yeping573/comments/commentRss/267131.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/yeping573/services/trackbacks/267131.html</trackback:ping><description><![CDATA[<span style="color: red; font-family: 楷体_GB2312"><strong>现在要求输入一个文件的目录Q之后将里面所有的备䆾文g删除Q备份文仉是以“.bak”?.BAK"l尾<br /> <br /> </strong> <p><span style="color: #339966"><strong>package TestFile;</strong></span></p> <p><span style="color: #339966"><strong>import java.io.File;<br /> import java.io.FileFilter;</strong><br /> <strong><span style="color: #0000ff">/**<br />  * @author 王业q?br />  * 用于qo?bakl尾或包?bak的文?br />  * q回值的含义?当包含该字符串时q回true<br />  */</span><br /> </strong><span style="font-family: Comic Sans MS">public class ListFilter implements FileFilter{<br style="font-family: " />  @Override<br style="font-family: " />  public boolean accept(File file) {</span><br /> <strong>    </strong><span style="color: #0000ff"><strong>//试指定的文Ӟ夹)是否应该包含在指定的列表中(是定作ؓqo的条件是否满I<br />   /*<br />    * 如果是目录的话,直接q回true 表示是满x件的一情况<br />    */<br /> </strong></span> <span style="color: #000000"><span style="color: #008000; font-family: Comic Sans MS"> if(file.isDirectory()) return true;</span><br /> </span><strong>  </strong><span style="color: #0000ff"><strong>/*<br />    * 如果不是目录的话Q通过判断在其名字里是否含有规定的字符Q?br />    * 因ؓstring的indexҎ在不满条gQ不含有指定的字W)是返?1<br />    * 所以以此来定是否满条g<br />    */<br /> </strong></span><span style="font-family: Comic Sans MS">  String name=file.getName();<br style="font-family: " /> <span style="color: #0000ff">    /*<br />      * int index=name.indexOf(".bak"); <br />      *</span> <span style="color: #0000ff">return index!=-1;<br /> <span style="font-family: 楷体_GB2312"><strong>  * q种Ҏ不安全,可能会删除文件名中还含有.bak的文Ӟ备䆾文gq可以用.BAKl尾<br /> </strong></span>    */<br />   <span style="color: #008000">  return name.endsWith(".bak")||name.endsWith(".BAK");</span><br style="font-family: " /> </span><br style="font-family: " />  }<br style="font-family: " /> }</span><br /> <br /> <span style="font-family: Comic Sans MS">使用此类<br /> </span></p> <p><span style="font-family: Comic Sans MS">package TestFile;</span></p> <p><span style="font-family: Comic Sans MS">import java.io.File;</span><br /> <span style="color: #0000ff"><strong>/** <br />  * @author Administrator<br />  * 涉及到递归调用<br />  */</strong></span></p> <p style="font-family: Comic Sans MS">public class BakDelete{<br />  public static void main(String[] args){<br />   BakDelete bd=new BakDelete();<br />   bd.listBakFile(new File("E:\\"));<br />  }<br />  public void listBakFile(File file){<br />   File[] fs=file.listFiles(<span style="color: #ff0000">ne</span><span style="color: #ff0000">w ListFilter()<span style="color: #339966">);</span></span><br />   for(int i=0;i<fs.length;i++){<br />    if(fs[i].isFile()){<br />     System.out.println(fs[i].getAbsolutePath());<span style="color: #0000ff">//打印文gl对路径</span><br />     fs[i].delete();<br />    }else{<br />     //System.out.println(fs[i].getAbsolutePath());<br />     listBakFile(fs[i]);<br />    }    <br />   }<br />   //System.out.println(fs.length);<br />  }<br /> }</p> </span></span> <img src ="http://www.aygfsteel.com/yeping573/aggbug/267131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/yeping573/" target="_blank">王业q?/a> 2009-04-23 13:54 <a href="http://www.aygfsteel.com/yeping573/archive/2009/04/23/267131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank">Ӧ</a>| <a href="http://" target="_blank">Ӱ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ػ</a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">лͨ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԣ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϵ</a>| <a href="http://" target="_blank">կ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">㺺</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>