本文共 1129 字,大约阅读时间需要 3 分钟。
Synchronized分类:修饰实例方法、静态方法和代码块
锁分类:偏向锁、轻量级锁和重量级锁
Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。JDK中对Synchronized做的种种优化,其核心都是为了减少这种重量级锁的使用。JDK1.6以后,为了减少获得锁和释放锁所带来的性能消耗,提高性能,引入了“轻量级锁”和“偏向锁”。 偏向锁、轻量级锁都是乐观锁,重量级锁是悲观锁。这种设计是为了根据实际的运行状态在不断变化锁的性质,即最开始默认是单线程,即偏向锁,之后如果来了另一个线程就变为轻量级锁,此时两个所冲突并不大,资源是交互使用的。但是,再接着,发现这两个锁总是相互枪资源,就变成重量级锁。
转载地址:http://rqepi.baihongyu.com/