首页 > 解决方案 > Lock 是否在单个线程上作为布尔信号量工作?

问题描述

我需要一个 Java 中的互斥锁,它在单个线程内和跨线程都提供独占访问。像这样做一些非常简单的事情:

    Lock l = new ReentrantLock();
    for (int i = 0; i < 5; i++) {
      Log.d(TAG, "Lock = " l.tryLock());
    }

令人惊讶的是,我每次来电都是如此:

Lock = true
Lock = true
Lock = true
Lock = true
Lock = true

为什么会这样,或者我从根本上做错了什么?

标签: java

解决方案


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

这是一件好事,否则您可以轻松创建单线程死锁。

所以不,它充当布尔信号量。如果您想要一个布尔信号量,请使用new Semaphore(1);. 尽管如果您确实打算导致自死锁,请确保您有另一个线程可以解决它。


推荐阅读