一个无状态的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的线程的计算结果 ,因为这两个线程并没有共享状态,就好像他们都在访问不同的实例。由于线程访问无状态对象的行为并不会影响其他线程中操作的正确性,因此无状态对象是线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值