公平锁,每次判断state为0时不能立即抢占,而是判断是否还有前置结点,也就是判断首节点后面是否还有结点排队等候,如果有通过cas入队。 非公平锁,新线程来了,不管有没有其他结点在排队先cas抢占,如果两次强锁失败,那么就进入到队列中,其实这和公平锁一样啦,需要排队。当没有新的线程抢占时,强锁也是按照队列先后顺序来抢的,类似公平锁。 非公平锁和公平锁 最大的区别就是新来的线程是不是插队抢占,如果它没抢到那后面就是老老实实排队,后面唤醒也要等前面的结点出队了才能唤醒,而且入队的结点可能存在饥饿。
44 6

相关推荐

牛客网
牛客企业服务