【连载】第2章-2.1什么是线程安全性
2019-08-20 本文已影响1人
可爱猪猪
格言:在程序猿界混出点名堂!

《JAVA并发编程实战》解读
【连载】第2章-2.1什么是线程安全性
回顾:第一章主要介绍线程的简史,让大家知道什么是线程,线程存在哪里,利和弊是什么,这一章会为后面的章节打下基础,介绍什么是线程安全性。
共享和可变
共享
意味着变量可以被多线程同时访问,这个很好理解。
可变
则意味着变量的值在其生命周期内可以发生变化。相对不可变而言,比如Java中我们熟悉的关键字final
,如果变量是final就不存在线程安全问题。
因此,共享
和可变
是造成线程不安全的必然条件,因此有以下三种方式可以避免不安全的发生:
- 变量不共享,多线程依次访问或者单线程访问。
- 使用不可变变量
- 多线程访问使用同步。
什么是线程安全性
书中说了几个段落,其实就一句话:所见即所知(We know it when we see it.)
。就是程序表现出来的行为和状态和你所期望的是一致的。
无状态
无状态一定是线程安全的
书中讲的就是Servlet的示例代码,大概意思就是方法中使用的都是局部变量,不存在共享变量,这个Servlet也就是线程安全。无状态
也就是没有共享变量的意思,也就是没有共享状态。见书中例子:
@ThreadSafe
public class StatelessFactorizer implements Servlet{
public void service(ServletRequest req, ServletResponse resp){
BigInteger I = extractFromRequest(req);
BigInteger[] factors = factor(i);
encodeIntoResponse(resp,factors);
}
}
知识点
- 共享和可变是导致线程出现不安全的条件。
- 线程安全性的理解:所见即所知。
- 什么是无状态。
喜欢连载可关注
简书
或者微信公众号
:
简书专题:Java并发编程实战-可爱猪猪解读
https://www.jianshu.com/c/ac717321a386
微信公众号:逗哥聊IT
。
![]()