Skip to content

Commit 847bf9a

Browse files
author
dingqy
committed
新增线程安全
1 parent 98dd1ee commit 847bf9a

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
*.txt
1+
*.txt
2+
.idea/

notes/Java 并发.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1235,8 +1235,17 @@ join() 方法返回先行发生于 Thread 对象的结束。
12351235

12361236
# 十一、线程安全
12371237

1238-
## 线程安全分类
1238+
##线程安全定义
1239+
一个类在可以被多个线程安全调用时就是线程安全的。
1240+
##考虑线程安全的情况:
1241+
- 静态成员变量,静态成员变量位于方法区,所有对象共享一份内存,一旦修改静态成员变量被修改,所有对象均可见,所以是线程非安全。
1242+
- 实例成员变量,实例变量为对象实例私有,在虚拟机的堆heap中分配,若在系统中只存在一个此对象的实例,在多线程环境下,“犹如”静态变量那样,
1243+
被某个线程修改后,其他线程对修改均可见,故线程非安全(如,springmvc controller是单例的,非线程安全的);如果每个线程执行都是在不同的
1244+
对象中,那对象与对象之间的实例变量的修改将互不影响,故线程安全(如,struts2 action默认是非单例的,每次请求在heap中new新的action实例,
1245+
故struts2 action可以用实例成员变量)。
1246+
- 局部变量,局部变量位于栈区,线程间不共享,方法结束就可能被回收,线程安全
12391247

1248+
## 线程安全分类
12401249
线程安全不是一个非真即假的命题,可以将共享数据按照安全程度的强弱顺序分成以下五类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。
12411250

12421251
### 1. 不可变

0 commit comments

Comments
 (0)