Java 锁在单个线程上作为布尔信号灯工作吗?

Java 锁在单个线程上作为布尔信号灯工作吗?,java,Java,我需要一个Java互斥体,它在单个线程内和跨线程提供独占访问。做一些非常简单的事情,比如: Lock l = new ReentrantLock(); for (int i = 0; i < 5; i++) { Log.d(TAG, "Lock = " l.tryLock()); } 为什么会这样,或者说我根本就错了?顾名思义,它是重新进入的,这意味着拥有它的线程可以重新获得它 这是一件好事,否则很容易造成单线程死锁 因此,它不充当布尔信号量。如果需要

我需要一个Java互斥体,它在单个线程内和跨线程提供独占访问。做一些非常简单的事情,比如:

    Lock l = new ReentrantLock();
    for (int i = 0; i < 5; i++) {
      Log.d(TAG, "Lock = " l.tryLock());
    }
为什么会这样,或者说我根本就错了?

顾名思义,它是重新进入的,这意味着拥有它的线程可以重新获得它

这是一件好事,否则很容易造成单线程死锁


因此,它不充当布尔信号量。如果需要布尔信号量,请使用
新信号量(1)。尽管您确实想引起自死锁,但请确保您有另一个线程可以解决它。

()值得注意的是,重新获取计数不是无限的。例如openjdk-8
此锁最多支持65535个递归写锁和65535个读锁。试图超过这些限制会导致锁定方法抛出错误
。只需重新阅读文档,应该已经很清楚了:“如果当前线程已经拥有锁,则该方法将立即返回。这可以使用isHeldByCurrentThread()和getHoldCount()方法进行检查。”我的问题是,这两个方法都不是出于某种原因向我公开的。@zzazles这是因为您的引用是,而不是
ReentrantLock
Lock = true
Lock = true
Lock = true
Lock = true
Lock = true