关闭

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

178人阅读 评论(0) 收藏 举报
分类:

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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10002次
    • 积分:228
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条