JVM 运行原理——基础

一、并发编程模型的分类

关键:
a. 线程之间的通信

  1. 以何种机制来交换信息,在命令式编程中,线程之间的通信方式有两种:共享内存和消息传递
  2. 共享内存并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信
  3. 消息传递并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信

b. 线程之间的同步

  1. 用于控制不同线程之间操作发生相对顺序的机制
  2. 共享内存并发模型里,同步是显式进行的,程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行
  3. 消息传递并发模型里,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的

Java 的并发模型采用的是共享内存模型,Java 和线程之间的通信总是隐式执行

二、Java 内存模型的抽象

在 Java 中,所有实例、静态域和数组存储在堆内存中,堆内存在线程之间共享。局部变量、方法定义参数、异常处理器参数不会在线程之间共享,不会有内存可见性问题,不受内存模型影响

Java 之间的通信受 Java 内存模型(JMM)的控制,JMM 决定了一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM 定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存(抽象概念,涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化)中存储了该线程以读/写共享变量的副本
Java 内存模型
从上图来看,线程之间的通信需要经过两个步骤

  1. 线程 A 把本地内存 A 中更新过的共享变量刷新到主内存中
  2. 线程 B 到主内存中读取线程 A 之前已更新过的共享变量
    线程之间的通信过程必须经过主内存,JMM 通过控制主内存与每个线程的本地内存之间的交互,来为 Java 程序员提供内存可见性保证
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值