java 多线程reentranlock问题求解

    final void lock() {
        if (compareAndSetState(0, 1))
            setExclusiveOwnerThread(Thread.currentThread());
        else
            acquire(1);
    }

reentranlock这里怎么进入else,网上的资料说第二个线程获取不到锁,就进入了else,但是这里cas不是死循环一直去获取的吗?怎么会进入else?

哪里有循环
没有for,没有while也没有递归,是怎么死循环的呢

  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:Java多线程系列 - ReentranLock
  • 除此之外, 这篇博客: Java 中的各种锁和 CAS + 面试题中的 2.new ReentrantLock() 创建的是公平锁还是非公平锁? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 答:非公平锁,查看 ReentrantLock 的实现源码可知。

    /\*\* \* Creates an instance of {@code ReentrantLock}. \* This is equivalent to using {@code ReentrantLock(false)}. \*/
    public ReentrantLock() {
        sync = new NonfairSync();
    }