java内存结构和线程

一、主内存和工作内存 变量是指实例字段、静态字段、构成数组的对象,不包括局部变量和方法参数

  1. 所有变量都存储在主内存中
  2. 线程工作内存保存了被该线程使用到的变量的副本
  3. 对变量所有的操作都是在工作内存进行,不能直接读写主内存的变量
  4. 线程间变量值的传递都要依赖主内存来完成

二、主内存和工作内存间的交互操作

  1. 一个变量从主内存拷贝到工作内存,再由工作内容写到主内存,是有Java的8种操作来完成的
    (1)lock
    (2)unlock unlock之前必须先把此变量同步到主内存\ (3)read
    (4)load
    (5)use
    (6)assign
    (7)store
    (8)read

三、volatile

  1. 保证可见性 volatile特殊规则保证新值能立即同步到主内存,以及使用前立即从主内存刷新
  2. 防止指令重排序
  3. 不保证原子性

四、先行发生原则(无需任何同步手段, )

  1. 程序次序规则: 在一个线程内,按照代码顺序,书写前面的操作先于后面的操作
int i=1;
int j=1;

有可能j=1先被执行,这不影响先行发生原则的正确性

  1. 管程锁定规则:同一把锁unlock在lock之前执行
  2. volatile变量规则:写先于读
  3. 线程启动规则:thread.start()先行于线程每一个动作。
  4. 线程终止规则:所有操作先于线程的终止检测
  5. 线程中断规则:interrupt()先行于中断线程的检测到中断发生
  6. 对象终止规则:初始化完成先于finalize开始之前
  7. 传递性:如果操作A先于B,B先于C,那A就先于C
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值