一个无状态的Servlet是安全的线程

示例: 

    通常,线程安全性的需求并非来源于对线程的直接使用,而是使用相Servlet这样的框架。我们来看一个简单的例子:一个基于Servlet的因数分解服务,并逐渐扩展它的功能,同时确保它的线程安全性。

    这个Servlet从请求中提取出数值,执行因数分解,然后将结果封装到该Servlet的响应中

public class StatelessFactorizer implements Servlet{
    public void service(ServletRequest req,ServletResponse resp){
       BigInteger i=exactFromRequest(req);
       BigInteter[] factors=factor(i);
       encodeIntoResponse(resp,factors);
 
    }

}

    与大多数Servlet相同,StatelessFactorizer是无状态的,它既不包含任何域,也不包含任何对其他类中域的引用。计算过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问。访问StatelessFactorizer的线程不会影响另外一个访问同一个StatelessFactorizer的线程的计算结果 ,因为这两个线程并没有共享状态,就好像他们都在访问不同的实例。由于线程访问无状态对象的行为并不会影响其他线程中操作的正确性,因此无状态对象是线程安全的。

猜你喜欢

转载自dbp5588.iteye.com/blog/2368367
今日推荐