<p><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">1</span><span style="font-size: 10.5pt;"><span style="">,</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">Servlet</span><span style=""><span style="font-size: 10.5pt;">是线程不安全的。</span></span></p>
<p><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">2</span><span style="font-size: 10.5pt;"><span style="">,关于使用</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">SingleThreadModel</span><span style="font-size: 10.5pt;"><span style="">。</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">实现了该接口后,表面上可以保障</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">的线程安全问题,但</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US"> </span><span style="font-size: 10.5pt;"><span style="">是也存在问题:</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">1</span><span style="font-size: 10.5pt;"><span style="">,</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">web</span><span style="font-size: 10.5pt;"><span style="">容器对实现了</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">SingleThreadModel</span><span style="font-size: 10.5pt;"><span style="">接口的</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">会采取两种策略第一种是为每一个线程产生一个</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">实例。这会导致服务器负载过重。而且如果</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">中有静态属性的话,这同样不能保障线程安全。第二种方式是</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">web</span><span style="font-size: 10.5pt;"><span style="">容器保障在这个</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">中的</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">service</span><span style="font-size: 10.5pt;"><span style="">方法将不会在两个线程中同时执行,也就是说执行完一个后再执行下一个请求的</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">service</span><span style=""><span style="font-size: 10.5pt;">,这会极大的降低效率。</span></span></p>
<p><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">3</span><span style="font-size: 10.5pt;"><span style="">,保障</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">servlet</span><span style=""><span style="font-size: 10.5pt;">线程安全的推荐办法是不要使用实例变量(对象所拥有,所有线程共享),而要使用临时变量(线程栈中独占)</span></span></p>
<p><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">4</span><span style="font-size: 10.5pt;"><span style="">,遇到必须使用局部变量的的情况,使用</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">synchronized</span><span style="font-size: 10.5pt;"><span style="">锁住。</span></span></p>
<p style="padding-left: 30px;"></p>
<p><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">2</span><span style="font-size: 10.5pt;"><span style="">,关于使用</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">SingleThreadModel</span><span style="font-size: 10.5pt;"><span style="">。</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">实现了该接口后,表面上可以保障</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">的线程安全问题,但</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US"> </span><span style="font-size: 10.5pt;"><span style="">是也存在问题:</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">1</span><span style="font-size: 10.5pt;"><span style="">,</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">web</span><span style="font-size: 10.5pt;"><span style="">容器对实现了</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">SingleThreadModel</span><span style="font-size: 10.5pt;"><span style="">接口的</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">会采取两种策略第一种是为每一个线程产生一个</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">实例。这会导致服务器负载过重。而且如果</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">中有静态属性的话,这同样不能保障线程安全。第二种方式是</span></span><span style="font-size: 10.5pt; font-family: Verdana;" lang="EN-US">web</span><span style="font-size: 10.5pt;"><span style="">容器保障在这个</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">servlet</span><span style="font-size: 10.5pt;"><span style="">中的</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">service</span><span style="font-size: 10.5pt;"><span style="">方法将不会在两个线程中同时执行,也就是说执行完一个后再执行下一个请求的</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">service</span><span style=""><span style="font-size: 10.5pt;">,这会极大的降低效率。</span></span></p>
<p><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">3</span><span style="font-size: 10.5pt;"><span style="">,保障</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">servlet</span><span style=""><span style="font-size: 10.5pt;">线程安全的推荐办法是不要使用实例变量(对象所拥有,所有线程共享),而要使用临时变量(线程栈中独占)</span></span></p>
<p><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">4</span><span style="font-size: 10.5pt;"><span style="">,遇到必须使用局部变量的的情况,使用</span></span><span style="font-size: 10.5pt; font-family: Times;" lang="EN-US">synchronized</span><span style="font-size: 10.5pt;"><span style="">锁住。</span></span></p>
<p style="padding-left: 30px;"></p>