Java基础-线程内存模型

计算机缓存模型

jvm-002.jpg

java缓存模型
  • 主内存主要对应堆

  • 工作内存属于线程私有,可能是cpu寄存器或者高速缓存

     

    jvm-003.jpg

  • 原子操作

    • lock(锁定):作用于主内存变量,把一个变量标志为一个线程独占状态

    • unlock(解锁):作用于主内存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定

    • read(读取):作用于主内存变量,把一个变量的值从主内存传输到线程工作内存中,供随后的load动作使用

    • load(载入):作用于工作内存变量,把read操作的结果放入工作内存的变量副本中

    • use(使用):作用于工作内存变量,把工作内存中一个变量的值传递给执行引擎

    • assign(赋值):作用于工作内存变量,把一个从执行引擎接受到的值赋给工作内存的变量

    • store(存储):作用于工作内存变量,把工作内存中一个变量的值传送到主内存中,供随后的write操作使用

    • write(写入):作用于主内存变量,把store操作的结果放入主内存的变量中

       

      jvm-004.jpg

    • 此处的lock和unlock属于底层操作,未开放

    • 开放的是字节码monitorenter和monitorexit,即synchronized

  • 可见性

    • volatile强制变量被线程访问时,从主内存重读;修改时,写回主内存
  • 有序性

    • 本线程内观察,均有序
    • 本线程观察别的线程,均无序

//线程1:
context = loadContext();   //语句1
inited = true;             //语句2
 
//线程2:
while(!inited ){
  sleep()
}
doSomethingwithconfig(context);
操作系统线程实现
  • native:往往意味着未使用或无法使用平台无关的方式实现
  • 实现方式
    • 使用内核线程实现

      • 以内核线程实现轻量级进程,供应用程序调用
      • 弊端:涉及系统调用,消耗内核资源

         

        jvm-005.jpg

    • 使用用户线程实现

      • 应用进程使用多个用户线程
      • 弊端:缺少内核支持,阻塞处理和多处理器映射等困难

         

        jvm-006.jpg

    • 使用用户线程加轻量级进程混合实现

       

      jvm-007.jpg

java线程实现
  • JDK 1.2之前基于用户线程实现
  • JDK 1.2开始基于操作系统原生线程实现,意味着平台相关
  • 目前Windows和Linux都是基于轻量级进程实现,即1:1模型
线程调度
  • 抢占式调度,系统自动完成
  • 优先级,给系统一些“建议”
  • 由于java线程是操作系统原生线程,实际调度取决于操作系统
  • Windows提供了7个级别,而java是10个

     

    jvm-008.jpg

线程状态转化

jvm-009.jpg

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eddy咸鱼

感谢大佬加鸡蛋~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值