JUC解析-原子操作

JUC是java.util.concurrent包的简称,主要包含了jdk中多线程相关的技术,例如锁、信号、线程安全的容器、线程池等,本节内容为JUC的基础-原子操作.

为什么会有原子操作

在多线程中,指令的执行在很多情况下会被打断,导致结果的不确定性,例如中断、线程的抢断以及多核SMP系统中程序的并发执行等,因此在这种情况下怎样对一些共享的资源进行原子操作就至关重要,当前的原子操作主要可以通过软件和硬件方式实现.

  1. 在以前的X86系统中,在硬件层面主要是通过在指令中通过LOCK前缀锁总线实现,但是由于总线是通用的,因此效率会比较低,当前大多数的x86处理器都是通过锁定缓存行来保证原子性,但是如果操作的数据扩越了多个缓存行,还是要使用总线锁定的方式保证原子性.
  2. 在java中原子性主要是通过锁和CAS(compare-and-swap)实现,其中CAS就是通过CMPXCHG指令实现的,实现的基本原理就是循环进行CAS操作直到成功为止.

java中的原子操作

  1. 在32位的jvm中,除了long和double类型为,其他的赋值操作都会原子的
  2. 在64位的jvm中,所有赋值操作都是原子的.
  3. volitle修饰的long和double在32位jvm下回保证原子性.
  4. 所有referenc的赋值.
  5. 善于使用java.util.concurrent.atomic.*包下的原子操作类.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值