问题标签 [reentrantlock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
474 浏览

java - Java ReentrantLock 问题

你好我有一些关于Lock's implementation: ReentrantLock. 我正在使用singleton cache内部Spring 3.0(web)。但是,当我同时打开几个浏览器选项卡时,所有线程似乎都被锁定,并且我收到了几个不必要的 Web 服务调用。为什么是这样?不是lock.tryLock()线程安全的吗?我尝试使用 an atomic boolean,但问题仍然存在。我还检查了引用的同一个 Cache 实例。

提前谢谢,干杯。

0 投票
6 回答
292 浏览

java - 部分线程安全是否使 Java 类成为线程安全的?

我遇到了下面这个声称是线程安全的 Java 类的示例。谁能解释一下它如何是线程安全的?我可以清楚地看到,类中​​的最后一个方法没有受到任何读取器线程的并发访问的保护。或者,我在这里遗漏了什么?

0 投票
3 回答
1745 浏览

java - 了解锁定范围

从这个链接,我了解到“由于 lock() 和 unlock() 方法调用是显式的,我们可以将它们移动到任何地方,建立任何锁定范围,从一行代码到跨越多个方法的范围”

所以我从上面的陈述中理解的是

所以基本上1可以依次调用method1和method2,并假设调用是线程安全的。

我不确定是否如上面所说的那样是真的。

如果有人在我已经在执行 method1/method2 对时调用了 method2 怎么办?是不是把事情复杂化了。

我认为在函数返回控制之前,应该在函数本身中获取和释放锁。我的理解正确吗?

0 投票
1 回答
186 浏览

multithreading - 在什么对象上可重入锁获得锁?

您好,我对 Concurrent 包中的 ReentrantLocks 有疑问。

它说两段代码是等价的。我没有得到的是在 Fist 块同步块中获取 obj 对象的锁定。但是可重入锁在什么对象上获取锁呢?我可以像 synchronized(obj) 一样指定我想要锁定的对象吗?

0 投票
5 回答
1575 浏览

java - java中的重入锁

我是java中多线程的新手。我试图使用锁。这是我的代码示例。

以下是我使用 tryLock() 时的输出

现在,根据我的理解,当第一个线程执行tryLock()时,它应该获得锁,其他线程应该无法获得锁。但是如输出所示。Thread-1获得锁后,Thread-2也获得锁等。这怎么可能。请告诉我我在这里缺少什么。提前致谢。

0 投票
2 回答
83 浏览

java - 在以下情况下如何确保线程安全?

我有一个名为 processOutbox 的方法。我希望它是线程安全的。我不希望另一个线程在有一个线程时调用此方法。我已经通过以下方式实现了它。我做对了吗?我的执行过程中是否存在任何漏洞?如果有的话,请告诉我如何解决它。

0 投票
1 回答
1113 浏览

java - ReeantrantLock 和 Condition 变量

你好:)我正在学习Java中的可重入锁和条件变量。我碰巧遇到了这个教程。在教程中,作者提供了一个利用 ReentrantLock 的 Producer-Consumer 示例:

方法l.lock()和方法l.unlock()是不必要Producer的吗?Consumer我注意到我们已经在Shared对象getSharedChar()setSharedChar()方法中应用了锁定/解锁。或者这是使用条件变量的建议模式?

这是一个不好的做法,你能提供一个更好的例子的链接吗?

谢谢:)

0 投票
1 回答
2224 浏览

java - 为什么不允许 ReadWriteLock 升级?

ReadWriteLock实现允许降级ReentrantReadWriteLocktryLock()从下面的示例中总是返回true):

不允许以类似方式升级锁的想法是什么?在没有其他线程持有读锁的情况下,下面的tryLock()锁方法可以安全地返回无死锁风险:true

0 投票
1 回答
103 浏览

java - 使用 ReentrantLock 是否同步可靠?

我搜索了很多,但对'ReentrantLock'和正常的 'synchronized'的过程感到困惑。

例如(1):

示例(2

我的问题是:

在示例1中:保证使用 synchronized 关键字获取对象上的锁。

在示例2中:是否保证将使用lock.lock()方法获取锁?还是线程会继续执行下一行?没有获得锁。

我对此表示怀疑,因为使用线程多次给我带来了意想不到的结果。

0 投票
1 回答
394 浏览

java - 重入锁条件

我有这段代码使用 ReentrantLock 和 Condition 来实现一个类来等待来自远程服务器的某些回调。我测试了这段代码,似乎可以工作,但我有几个问题。

  1. 为什么我需要在 onCallbackReceived() 中做 alock.lock() / unlock()。没有调用 lock() / unlock(),我得到了一个 IllegalState 异常。我很困惑,因为当另一个线程调用 onCallbackReceived() 时,waitForCallback() 的调用者持有锁,所以 onCallbackReceived() 中的 alock.lock() 总是会失败。

  2. 我是否需要使用 while 循环将 condition.await() 包装在 waitForCallback() 中?

    while(message==null) 条件.await();