知道为什么这个构造函数无限期挂起吗?我正在尝试创建一个线程安全的单例。

private RWLockedSingleton() {
    lock.writeLock().lock();
    System.out.println("we're done!");
    isComplete = true;
    lock.writeLock().unlock();
}


顺便说一句,我意识到最好将锁放在静态吸气剂中。我只是想知道在构造函数中使用锁是否本质上是错误的

最佳答案

恕我直言,锁定构造函数几乎总是不正确的。有一个很好的理由,您不能将synchronized添加到构造函数中。您应该锁定调用构造函数的方法。

即使您持有readLock(),即使它在同一线程中,也可以让它永远等待一次writeLock()。

创建延迟加载的线程安全单例的最简单且通常是最有效的方法是使用enum

enum Singleton {
    INSTANCE;
}

07-24 15:53