多线程竞争非公平锁
2023-08-20 14:05:13 0 举报
多线程竞争非公平锁
作者其他创作
大纲/内容
head = null
tailthread = 线程 3waitStatus = 0
head 节点其实就是已经拿到锁的线程,对应线程 1,节点的 thread 为 null,但是可以通过 exclusiveOwnerThread 获取线程 1;唤醒时,从 head 开始向后唤醒,即使是非公平锁,也要按照顺序被唤醒;可以看到,非公平锁的非公平性,体现在进入等待队列之前,可以直接进行一次 cas;
exclusiveOwnerThread = null
state = 1
tail = null
线程 3cas 失败;入队等待;线程 3 阻塞
exclusiveOwnerThread = 线程 1
tailthread = 线程 2waitStatus = 0
thread = 线程 2waitStatus = -1
线程 1cas 成功;线程 1 执行;
headthread = nullwaitStatus = -1
AQS
state = 0
线程 2cas 失败;创建等待队列;入队等待;线程 2 阻塞;
0 条评论
下一页