JAVA并发编程基础

并发编程中的关键问题

  1. 线程之间如何通信

    • 共享内存的并发模型中:线程之间通过读写内存中的公共状态来隐式进行通信

    • 信息传递的并发模型中:线程之间没有公共状态,线程间通过明确的发送信息方式来显性进行通信

  2. 线程之间如何同步

    • 共享内存的并发模型中:同步是显性进行的,程序员通过显式指定某个方法或代码在线程之间互斥执行

    • 信息传递的并发模型中:由于信息的阿松必须在消息的接收之前,因此同步是隐式进行的

线程: 并发执行的活动实体

通信: 指的是线程之间以何种机制交换信息

同步: 是指程序用户控制不同线程之间操作发生相对顺序的机制

JAVA 的内存模型(JMM)

java 采用的是:共享内存模型

特点是 :通信是隐形进行的,同步是显性进行的。整个通信过程对程序员完全透明

JMM 控制线程间通信,决定一个线程对共享变量的写入何时对另一个线程可见

JAVA 内存模型(JMM)抽象

  1. 存在线程共享:有内存可见性问题,受内存模型影响

    • 堆内存,(包含,实例域,静态域,数组元素;这些元素使用”共享变量”这个术语来代指)

  2. 不存在线程共享:不会有内存可见性问题,不受内存模型影响

    • 方法定义参数

    • 异常处理参数

JMM 线程与主内存间的抽象关系

线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory);本地内存中存储了该线程以读/写共享变量的副本

本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他硬件和编译器优化。

 

线程A与B间通信步骤

  1. 线程A将本地内存A中更新过的共享变量刷新入主内存中去

  2. 线程B到主内存中去读取线程A之前已经更新过的共享变量

 

这两个步骤的实质是线程A通过主内存向线程B发送消息。JMM通过控制主内存与每个线程的本地内存间的交互,来为程序员挺内存可见性的保证。

 

线程的通信机制

共享内存和信息传递

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值