Gavin的前行之路

写博客为了是让自己多去总结

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011760575/article/details/53999596
个人分类: Java基础回顾
上一篇Java关键字系列 — String、StringBuffer、StringBuilder的区别和使用
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭