线程安全性

在理解什么是线程安全性,讲到一个实例:

一个无状态的Servlet

@ThreadSafe

public class StatelessFactorizer implements Servlet{

public void service (ServletRequest req, ServletResponse resp){

BigInteger i = extractFromRequest(req);

BigInteger[] factors=factors(i);

encodeIntoResponse(resp,factors);

}

}

与大多数Servlet一样,StatelessFactorizer 是无状态的:既不包含任何域,也不包含任何对其他类中域的引用。

servlet如果定义了一个static类型的成员变量--有状态的servlet

任何你处理的时候如果要改这个字段并进行处理,可能你第一次请求改了这个字段 之后处理之前  这个字段就被第二个并发请求给改了--线程不安全

如果你一个成员变量都没有 就不会有这个问题--无状态的servlet

无状态对象一定是线程安全的。

在线程安全类中封装了必要的同步机制,因此客户端无须进一步采取同步机制。

当多个线程访问某一个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确行为,那么这个类是线程安全的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。