java并发编程实践 2.1 什么是线程安全性

缘起

《java并发编程实践》2.1节

分析

线程安全性的定义是给一个类的状态下的定义.

一个状态是线程安全的,指的是,多根线程并发访问(读或者写)该状态,该状态最终依旧是符合预期的

一个设计良好的线程安全的对象封装了一切必要的同步,该类的使用者不需要提供任何同步处理.

但是良好的设计有的时候总需要和外界的现实进行妥协(摊手).

利用本小节的概念,我们可以回答一个问题——为什么Servlet是无状态的?

因为servlet框架创建了很多线程,这些线程会来调用我们编写好的servlet组件. 如果我们的servlet组件是有状态的(根据上一篇笔记,所谓状态就是组件中的数据——不论是成员变量还是静态成员变量),则我们的servlet就不安全(除非加了同步操作——根据我们上一节笔记中提及的原则),而如果servlet无状态,则每根线程来调用我们编写好的servlet组件的时候,涉及的变量全部在各自的线程的栈中的本地变量(本地变量在线程的栈中),而线程栈是线程私有的,不共享的. 则就不会涉及线程安全问题. 所以我们得到一个结论

无状态的对象一定永远是线程安全的.

其实这是废话啊,因为上面给出的线程安全的定义就是给状态下的,你连状态都没有了,当然是线程安全的啦.