Java面试中,偏向锁和轻量级锁的引入及其升级流程是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1233个文字,预计阅读时间需要5分钟。
Hi,我是Mic,一个工作了7年的粉丝。他最近来找我说,他被各种锁搞晕了。比如,共享锁、排它锁、偏向锁、轻量级锁、自旋锁、重量级锁、间隔锁、瞬态锁、意向锁、读写锁、乐观锁、悲观锁。
普通人:Hi,我是Mic
一个工作了7年的粉丝来找我,他说最近被各种锁搞晕了。
比如,共享锁、排它锁、偏向锁、轻量级锁、自旋锁、重量级锁、
间隙锁、临键锁、意向锁、读写锁、乐观锁、悲观锁、表锁、行锁。
然后前两天去面试,被问到偏向锁、轻量级锁,结果没回答上来。
ok,关于Synchronized锁升级的原理,看看普通人和高手的回答。
我觉得引入这些锁的目的应该是考虑到那个性能问题吧。
因为我记得好像是说Synchronized里面去加重量级锁的话,它的这个线程会存在这个阻塞就是会影响性能。所以才引入了偏向锁的一个机制。
然后升级的话就是说我们那些获取锁的时候就是按照偏向锁、轻量级锁和重量级锁的方式去竞争锁吧。
高手:好的,面试官。
-
Synchronized在jdk1.6版本之前,是通过重量级锁的方式来实现线程之间锁的竞争。
之所以称它为重量级锁,是因为它的底层底层依赖操作系统的Mutex Lock来实现互斥功能。
Mutex是系统方法,由于权限隔离的关系,应用程序调用系统方法时需要切换到内核态来执行。
这里涉及到用户态向内核态的切换,这个切换会带来性能的损耗。
-
在jdk1.6版本中,synchronized增加了锁升级的机制,来平衡数据安全性和性能。
本文共计1233个文字,预计阅读时间需要5分钟。
Hi,我是Mic,一个工作了7年的粉丝。他最近来找我说,他被各种锁搞晕了。比如,共享锁、排它锁、偏向锁、轻量级锁、自旋锁、重量级锁、间隔锁、瞬态锁、意向锁、读写锁、乐观锁、悲观锁。
普通人:Hi,我是Mic
一个工作了7年的粉丝来找我,他说最近被各种锁搞晕了。
比如,共享锁、排它锁、偏向锁、轻量级锁、自旋锁、重量级锁、
间隙锁、临键锁、意向锁、读写锁、乐观锁、悲观锁、表锁、行锁。
然后前两天去面试,被问到偏向锁、轻量级锁,结果没回答上来。
ok,关于Synchronized锁升级的原理,看看普通人和高手的回答。
我觉得引入这些锁的目的应该是考虑到那个性能问题吧。
因为我记得好像是说Synchronized里面去加重量级锁的话,它的这个线程会存在这个阻塞就是会影响性能。所以才引入了偏向锁的一个机制。
然后升级的话就是说我们那些获取锁的时候就是按照偏向锁、轻量级锁和重量级锁的方式去竞争锁吧。
高手:好的,面试官。
-
Synchronized在jdk1.6版本之前,是通过重量级锁的方式来实现线程之间锁的竞争。
之所以称它为重量级锁,是因为它的底层底层依赖操作系统的Mutex Lock来实现互斥功能。
Mutex是系统方法,由于权限隔离的关系,应用程序调用系统方法时需要切换到内核态来执行。
这里涉及到用户态向内核态的切换,这个切换会带来性能的损耗。
-
在jdk1.6版本中,synchronized增加了锁升级的机制,来平衡数据安全性和性能。

