首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
clh专题
【Java】CLH 自旋锁
看java重入锁的代码,遇到了CLH队列锁,发现实现很巧妙,学习一下。 什么是自旋锁?说的是锁等待的实现方式,可以改变线程的状态,让其进入等待或者睡眠(具体状态还没研究),这就是使用线程最原生的方式实现。也可以让线程进入一个while循环,这是一种轻量级实现,没有设计线程状态的转换,节省了转换的开销,但是cpu开销可能很大,进入循环的方式就是自旋锁。 下面是一段很常见的理解CLH的代码:
阅读更多...
一文让你彻底搞懂AQS-CLH同步队列
CLH队列锁提过,AQS里面的CLH队列是CLH同步锁的一种变形。其主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用;在等待机制上由原来的自旋改成阻塞唤醒。其结构如下: 知道其结构了,我们再看看他的实现。在线程获取锁时会调用AQS的acquire(
阅读更多...