Java关键字系列 — volatile、synchronized、lock

volatile、synchronized和lock是Java应对并发编程提出的三个比较常用的关键字,下面具体讲一下三个关键字的特征、具体应用场景。

volatile

控制层面
内存和CPU高速缓存

控制机制
控制主内存和CPU高速缓存的一致性,当一个线程更改了某个内存变量时,会强制更新主内存,并通知其他CPU从主内存中重新获取变量值。

应用场景
1. 对变量的写操作不依赖于当前值
2. 该变量没有包含在具有其他变量的不变式中

补充描述
一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:
1. 可见性: 一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2. 有序性:禁止进行指令重排序

synchronized

控制层面
JVM层面

控制机制
控制某个方法的执行者或者是某个变量的拥有者。如果是方法锁,则同一时间只能有一个线程使用该方法,其他线程阻塞;如果是对象所,则哪个线程最先拥有锁对象,则哪个线程先执行,其他线程阻塞。

应用场景
1. 需要保证系统的原子性
2. 锁资源竞争不是很激烈

lock

控制层面
CPU总线

控制机制
控制线程的执行的CPU,在总线之下只允许一个线程的CPU可以访问某个内存,当某个线程执行结束之后其他线程才能访问变量资源

应用场景
1. 需要保证系统的原子性
2. 锁资源竞争相对较激烈

博客参考:http://www.cnblogs.com/dolphin0520/p/3920373.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值