问题标签 [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.
java - Java ReentrantLock 问题
你好我有一些关于Lock's implementation: ReentrantLock
. 我正在使用singleton cache
内部Spring 3.0(web)
。但是,当我同时打开几个浏览器选项卡时,所有线程似乎都被锁定,并且我收到了几个不必要的 Web 服务调用。为什么是这样?不是lock.tryLock()
线程安全的吗?我尝试使用 an atomic boolean
,但问题仍然存在。我还检查了引用的同一个 Cache 实例。
提前谢谢,干杯。
java - 部分线程安全是否使 Java 类成为线程安全的?
我遇到了下面这个声称是线程安全的 Java 类的示例。谁能解释一下它如何是线程安全的?我可以清楚地看到,类中的最后一个方法没有受到任何读取器线程的并发访问的保护。或者,我在这里遗漏了什么?
java - 了解锁定范围
从这个链接,我了解到“由于 lock() 和 unlock() 方法调用是显式的,我们可以将它们移动到任何地方,建立任何锁定范围,从一行代码到跨越多个方法的范围”
所以我从上面的陈述中理解的是
所以基本上1可以依次调用method1和method2,并假设调用是线程安全的。
我不确定是否如上面所说的那样是真的。
如果有人在我已经在执行 method1/method2 对时调用了 method2 怎么办?是不是把事情复杂化了。
我认为在函数返回控制之前,应该在函数本身中获取和释放锁。我的理解正确吗?
multithreading - 在什么对象上可重入锁获得锁?
您好,我对 Concurrent 包中的 ReentrantLocks 有疑问。
它说两段代码是等价的。我没有得到的是在 Fist 块同步块中获取 obj 对象的锁定。但是可重入锁在什么对象上获取锁呢?我可以像 synchronized(obj) 一样指定我想要锁定的对象吗?
java - java中的重入锁
我是java中多线程的新手。我试图使用锁。这是我的代码示例。
以下是我使用 tryLock() 时的输出
现在,根据我的理解,当第一个线程执行tryLock()时,它应该获得锁,其他线程应该无法获得锁。但是如输出所示。Thread-1获得锁后,Thread-2也获得锁等。这怎么可能。请告诉我我在这里缺少什么。提前致谢。
java - 在以下情况下如何确保线程安全?
我有一个名为 processOutbox 的方法。我希望它是线程安全的。我不希望另一个线程在有一个线程时调用此方法。我已经通过以下方式实现了它。我做对了吗?我的执行过程中是否存在任何漏洞?如果有的话,请告诉我如何解决它。
java - ReeantrantLock 和 Condition 变量
你好:)我正在学习Java中的可重入锁和条件变量。我碰巧遇到了这个教程。在教程中,作者提供了一个利用 ReentrantLock 的 Producer-Consumer 示例:
方法l.lock()
和方法l.unlock()
是不必要Producer
的吗?Consumer
我注意到我们已经在Shared
对象getSharedChar()
和setSharedChar()
方法中应用了锁定/解锁。或者这是使用条件变量的建议模式?
这是一个不好的做法,你能提供一个更好的例子的链接吗?
谢谢:)
java - 为什么不允许 ReadWriteLock 升级?
ReadWriteLock
实现允许降级ReentrantReadWriteLock
(tryLock()
从下面的示例中总是返回true
):
不允许以类似方式升级锁的想法是什么?在没有其他线程持有读锁的情况下,下面的写tryLock()
锁方法可以安全地返回无死锁风险:true
java - 使用 ReentrantLock 是否同步可靠?
我搜索了很多,但对'ReentrantLock'和正常的 'synchronized'的过程感到困惑。
例如(1):
示例(2)
我的问题是:
在示例1中:保证使用 synchronized 关键字获取对象上的锁。
但
在示例2中:是否保证将使用lock.lock()方法获取锁?还是线程会继续执行下一行?没有获得锁。
我对此表示怀疑,因为使用线程多次给我带来了意想不到的结果。
java - 重入锁条件
我有这段代码使用 ReentrantLock 和 Condition 来实现一个类来等待来自远程服务器的某些回调。我测试了这段代码,似乎可以工作,但我有几个问题。
为什么我需要在 onCallbackReceived() 中做 alock.lock() / unlock()。没有调用 lock() / unlock(),我得到了一个 IllegalState 异常。我很困惑,因为当另一个线程调用 onCallbackReceived() 时,waitForCallback() 的调用者持有锁,所以 onCallbackReceived() 中的 alock.lock() 总是会失败。
我是否需要使用 while 循环将 condition.await() 包装在 waitForCallback() 中?
while(message==null) 条件.await();