乐趣区

关于java:锁的四种状态

synchronized 底层

synchronized 理论没有设想中的那么 ” 轻便 ”

优化

JDK 6 中为了缩小取得锁和开释锁带来的性能耗费,引入了“偏差锁”和“轻量级锁”。

锁的四种状态

锁一共有 4 种状态,级别从低到高顺次是:无锁、偏差锁、轻量级锁和重量级锁。锁状态只能降级不能降级。

无锁

无锁没有对资源进行锁定,所有的线程都能拜访并批改同一个资源,但同时只有一个线程能批改胜利。

CAS 原理及利用即是无锁的实现。无锁无奈全面代替有锁,但无锁在某些场合下的性能是十分高的。

偏差锁

偏差锁是指一段同步代码始终被一个线程所拜访,那么该线程会主动获取锁,升高获取锁的代价。

在大多数状况下,锁总是由同一线程屡次取得,不存在多线程竞争,所以呈现了偏差锁。其指标就是在只有一个线程执行同步代码块时可能进步性能。

轻量级锁

是指当锁是偏差锁的时候,被另外的线程所拜访,偏差锁就会降级为轻量级锁,其余线程会通过自旋的模式尝试获取锁,不会阻塞,从而进步性能。

若以后只有一个期待线程,则该线程通过自旋进行期待。然而当自旋超过肯定的次数,或者一个线程在持有锁,一个在自旋,又有第三个来访时,轻量级锁降级为重量级锁。

重量级锁

降级为重量级锁时,此时期待锁的线程都会进入阻塞状态。也就是咱们了解的 synchronized 锁住资源,其余线程组阻塞期待

退出移动版