Synchronized及其实现原理
来源:互联网 发布:开源bug系统 java 编辑:程序博客网 时间:2024/04/30 12:45
Synchronized原理:
每个对象有一个监视器锁(monitor),当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权,过程如下:
- 如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1,该线程即为monitor的所有者
- 如果线程已经占有该monitor,只是重新进入,则进入monitor的进入数加1
- 如果其他线程已经占用了monitor,则该线程进入阻塞状态,直到monitor的进入数为0,再重新尝试获取monitor的所有权
Synchronized总共有三种用法:
- 修饰普通方法
- 修饰静态方法
- 修饰代码块
Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。JDK中对Synchronized做的种种优化,其核心都是为了减少这种重量级锁的使用。JDK1.6以后,为了减少获得锁和释放锁所带来的性能消耗,提高性能,引入了“轻量级锁”和“偏向锁”。
0 0
- Synchronized及其实现原理
- synchronized及其实现原理
- Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理
- Java并发编程:Synchronized及其实现原理 (r)
- Java并发编程:Synchronized及其实现原理(转)
- 经典算法之传染病问题
- onino病毒来袭,教你快速关闭某端口
- 经典算法之八皇后问题
- 021-将镜像推送到 Docker Hub
- 解决Mysql不在电脑服务列表中的问题
- Synchronized及其实现原理
- 数据结构之树
- USACO
- Stereo Processing by Semi-Global Matching and Mutual Information 论文翻译
- 022-利用 Docker Hub 与 GitHub 来完成镜像的自动构建
- 023-删除Docker镜像
- SIFT特征提取原理
- 快速排序的递归和非递归实现
- 024-构建私有的 Docker Registry