Merge pull request #231 from algorithmslover/master

线程安全定义
This commit is contained in:
CyC2018 2018-04-27 12:47:36 +08:00 committed by GitHub
commit 50971515d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 2 deletions

3
.gitignore vendored
View File

@ -1 +1,2 @@
*.txt
*.txt
.idea/

View File

@ -1234,8 +1234,17 @@ join() 方法返回先行发生于 Thread 对象的结束。
# 十一、线程安全
## 线程安全分类
##线程安全定义
一个类在可以被多个线程安全调用时就是线程安全的。
##考虑线程安全的情况:
- 静态成员变量,静态成员变量位于方法区,所有对象共享一份内存,一旦修改静态成员变量被修改,所有对象均可见,所以是线程非安全。
- 实例成员变量实例变量为对象实例私有在虚拟机的堆heap中分配若在系统中只存在一个此对象的实例在多线程环境下“犹如”静态变量那样
被某个线程修改后其他线程对修改均可见故线程非安全springmvc controller是单例的非线程安全的如果每个线程执行都是在不同的
对象中那对象与对象之间的实例变量的修改将互不影响故线程安全struts2 action默认是非单例的每次请求在heap中new新的action实例
故struts2 action可以用实例成员变量
- 局部变量,局部变量位于栈区,线程间不共享,方法结束就可能被回收,线程安全
## 线程安全分类
线程安全不是一个非真即假的命题,可以将共享数据按照安全程度的强弱顺序分成以下五类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。
### 1. 不可变