内存模型:
内存中的变量,指的是实例字段、静态字段、构成数组对象的元素,不包括局部变量和方法参数这样的,因为这些是线程私有的。
规定变量只能存储在主内存中,另外线程有自己的工作内存。
原子操作:
1.lock 锁定主内存中的变量
2.unlock 解锁主内存中的变量
3.read 变量从主内存到工作内存
4.load 工作内存到变量副本
5.use 变量副本到执行引擎
6.assign 执行引擎到工作内存中的变量
7.store 工作内存中变量到主内存
8.write 变量值到主内存的变量
原子操作的规则很多,等价判定是先行原则。
volatile类型变量:use之前会刷新,边上use过程当中和回写时还是会引起线程安全问题。这是可见性。第二是禁止指令重排序。
关于其主要通过lock add这个空操作,它会刷新多个cpu的cache,形成内存屏障。(不想细致分析了没意义)
除volatile之外,synchronize和final也可以实现可见性
先行发生原则:A操作的影响能被B观察到,就是A先行与B。先行关系:很多
线程模型:java线程模型与平台是相关的
1.KLT 1:1 LWP
2.P 1:N UT
3.混合型 UT N:M LWP
线程调度模型:
1.协同式
2.抢占式 Java选用
线程状态:
1.new
2.Runnable
3.Waiting/Timed Waiting 调用wait()
4.Blocked 等待锁
5.Terminated