synchronized 底层
synchronized 理论没有设想中的那么 ” 轻便 ”
优化
JDK 6 中为了缩小取得锁和开释锁带来的性能耗费,引入了“偏差锁”和“轻量级锁”。
锁的四种状态
锁一共有 4 种状态,级别从低到高顺次是:无锁、偏差锁、轻量级锁和重量级锁。锁状态只能降级不能降级。
无锁
无锁没有对资源进行锁定,所有的线程都能拜访并批改同一个资源,但同时只有一个线程能批改胜利。
CAS 原理及利用即是无锁的实现。无锁无奈全面代替有锁,但无锁在某些场合下的性能是十分高的。
偏差锁
偏差锁是指一段同步代码始终被一个线程所拜访,那么该线程会主动获取锁,升高获取锁的代价。
在大多数状况下,锁总是由同一线程屡次取得,不存在多线程竞争,所以呈现了偏差锁。其指标就是在只有一个线程执行同步代码块时可能进步性能。
轻量级锁
是指当锁是偏差锁的时候,被另外的线程所拜访,偏差锁就会降级为轻量级锁,其余线程会通过自旋的模式尝试获取锁,不会阻塞,从而进步性能。
若以后只有一个期待线程,则该线程通过自旋进行期待。然而当自旋超过肯定的次数,或者一个线程在持有锁,一个在自旋,又有第三个来访时,轻量级锁降级为重量级锁。
重量级锁
降级为重量级锁时,此时期待锁的线程都会进入阻塞状态。也就是咱们了解的 synchronized 锁住资源,其余线程组阻塞期待