java内存模型与线程(上)

为什么需要多任务处理?
1 由于计算机的运算速度和它的存储设备数度之间,存在着几个数量级的差别。因此为了防止运算能力的浪费,就想到了多任务的方式将运算能力充分的利用其来
2 在现实生活中,由一台服务器服务多个客户端的情况是非常常见的。这个时候也就需要进行多任务处理。
硬件的效率和一致性
1 为了平衡处理器和主内存之间的速度差异,我们在两者之间引入了一层高速缓存机制。
2 当处理器需要使用数据时,高速缓存从主内存中将对应的数据复制过来; 当处理器使用结束之后,需要把高速缓存中的数据同步回主内存中
3 由于处理器之间相互独立,因此对应的高速缓存相互独立。并且处理器之间的操作各有千秋,当多个处理器的运算任务都涉及到同一个主内存区域时,可能导致各自缓存的数据出现不一致的情况。
那么此时,出现的问题是:当将高速缓存的结果同步回主内存时,该听谁的呢?
4 为了解决3中的问题,提出了缓存一致性协议。
5 在实际运算过程中,处理器会对输入的代码进行乱序执行,但最终的结果仍然如同顺序执行的一样。这样做的目的是为了处理器内部的运算单元能够被充分的利用
在这里插入图片描述java内存模型-----------是什么?
1 简单说: 为了并发
2 详细描述:通过屏蔽各种硬件系统和操作系统之间的内存访问差异,从而使得java程序在各种平台下都能够实现并发的效果
3 目的: 定义在虚拟机中变量从内存进行读取、写入这些底层细节问题。这里说指的变量不包括线程私有的变量,而是指那些实例字段,静态字段,和构成数组对象的元素
java内存模型--------------主内存和工作内存
1 线程有自己对应的工作内存。当线程需要使用主内存中的变量是,需要现将主内存中的变量拷贝到工作内存中;当线程处理完这个变量,那么会把工作内存中的变量同步到主内存中去。
在这里插入图片描述java内存模型-----------------内存间的相互操作
在这里插入图片描述java内存模型----------volatile型变量的特殊规则
1 volatile是什么?
volatile是java内存模型中最轻量级的同步机制。
2 volatile的对象是什么?
volatile是用来修饰变量的关键字
3 volatile具有哪两个语义性?
可见性:保证由volatile定义的变量对于所有线程是可见的。
禁止指令重排序优化:
4 volatile的可见性
由于由volatile修饰的变量对于所有的线程是可见的,因此可以得出结论对于所有线程是一致的。但是volatile在并发情况下不一定能够保证是安全的。这是因为volatile操作是非原子性的。
为了使得volatile在并发线程下安全需要满足以下两个条件:
4.1运算结果不依变量的当前值,或者能够保证只有单一的线程修改变量的值
4.2 变量不需要与其他的状态变量共同参与不变约束
5 volatile在java内存模型中特殊的定义规则
5.1 每次使用volatile变量都需要进行刷新,使得能够得到主内存中改变量最新的值
5.2 每次修改volatile变量都需要进行同步,保证其他线程能够看到这个变量被修改
5.3 volatile修饰的变量,不允许被指令重排序优化
java内存模型-------------对于long和doble型边变量的特殊规则

java内存模型-----------------该模型的特征:原子性、可见性与有序性
1 原子性
java内存模型中直接保证的原子性变量操作包括read load assign use store write,所以我们可以认为基本数据类型的访问读写是具备原子性的。
如果应用场景需要更大范围的原子性保证,java内存模型还提供了lock和unlock操作来满足这中需求。synchronized ------mointorenter和mointorexist-------------lock和unlock
2 可见性
当线程对共享变量进行操作时,java内存模型是通过即时将修改之后的值同步回主内存中,然后读取变量之前刷新主内存中的值这样的方式来实现可见性
共享变量的指定方式:volatile关键字和synchronized关键字(同一时刻内只允许一条线程对其进行lock操作)和finall关键字
3 有序性
单一线程角度:串行
多线程角度:指令重排序优化
是先有序性的方式:volatile关键字和synchronized关键字(
java内存模型---------------先行发生原则
java内存模型中,天然的先行发生关系
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值