问题标签 [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 投票
2 回答
8879 浏览

java - java - 如何创建公平锁来解决java中的饥饿问题?

我想创建公平锁,以便每个线程一个接一个地获得锁,而不管优先级如何。

所以我有4个线程。3 具有最高优先级,1 具有最低优先级。我通过创建公平锁

当我运行这个演示时,它不会让具有最小优先级的线程执行与具有最大优先级的线程一样多的执行次数。但我认为公平锁就是为了这个。

如何正确使用公平锁?

0 投票
1 回答
370 浏览

java - 如何在被 ReentrantLock 锁定的临界区等待指定时间?

当线程处于被锁定的关键部分时,我需要以某种方式停止线程 1 秒ReentrantLock

我的代码是:

当我调用lock.wait(1000)run() 方法时,它会抛出IllegalMonitorStateException.

如果我通过lock.lock()方法获得监视器,为什么会出现此异常?

当我打电话super.wait(1000)而不是lock.wait(1000).

0 投票
1 回答
1755 浏览

java - 没有等待线程的信号条件

我正在使用 aReentrantLock和 aCondition来同步两个线程。每当消费者线程await()在生产者线程执行 a 之前执行 a on 条件时signal(),事情似乎工作正常。但是,当生产者线程signal()在消费者线程执行 a 之前执行 a 时await(),则消费者线程最终将永远等待。这是应该发生的还是我做错了什么?当发出条件信号并且没有等待线程时,预期的行为是什么?

这是消费者的代码:

这是生产者的代码:

0 投票
0 回答
1060 浏览

java - 在 Android 上解锁 ReentrantLock 时出现 IllegalMonitorStateException

我正在使用 ReentrantLock 及其推荐的做法(锁定,然后是 try-block 中的实际代码,然后最终解锁,请参见下面的代码示例)。有时(非常非常罕见)我在解锁期间遇到 java.lang.IllegalMonitorStateException 异常。为什么会发生?也许它与Android的Java VM实现有关。

错误:

代码示例(略微简化):

0 投票
1 回答
1181 浏览

java - 使用 ExecutorService 有序写入同一个文件

我正在尝试在 ExecutorService 中实例化需要按顺序写入文件的任务,因此如果存在 33 个任务,他们需要按顺序写入...

我尝试使用 LinkedBlockingQueue 和 ReentrantLock 来保证顺序,但根据我在公平模式下的理解,它解锁到 ExecutorService 创建的 x 个线程中最年轻的一个。

在构造函数中

所以我处理输入文件对等任务的配额

任务做

我的问题出现在这里:

0 投票
1 回答
146 浏览

java - Second thread executed even though first thread locked using ReentrantLock

I am newbie in Java , trying to learn Java concepts with Implementation. The reason for ReentrantLock class here is to understand Locks.

I am spawning 3 threads , and in these I just increment a Global Counter. I am protecting the Counter overwrites by other thread using Locks.

Observed Output from above code

My Expected Output

I went through reentrantlock-lock-doesnt-block-other-threads However ,I am NOTusing here

Condition.await()

Thus I was not able to co-relate with my implementation. Please help me to understand the mistake or Understand ReentrantLock application in my implementation which is causing the diference in Exepected Output and observered output.

0 投票
2 回答
290 浏览

java - 如果线程获得 10 个可重入锁并死掉会发生什么?

假设一个线程多次获取资源的可重入锁并死掉。资源会怎样?其他客户端可以访问该资源吗?

0 投票
1 回答
346 浏览

java - 何时在 Java 并发中使用公平模式?

我真的很困惑为什么java需要这个功能。当公平模式可以与 ex: 一起使用时,请分享一些真实的例子:ReentrantLock, ReadWriteLock, Semaphore.

0 投票
1 回答
1053 浏览

java - 为什么要递归获取(可重入)锁?

ReentrantLock 允许线程递归地获取相同的锁,因此锁计数在连续锁定/解锁时递增和递减。而锁计数必须在释放给其他线程之前减少到零。

为什么或在什么情况下我会编写代码以递归方式获取锁?

我能看到的唯一一点是让我们可以方便地编写递归代码,其中递归调用方法(在其执行过程中获取锁)。

在其他情况下,线程递归/重复获取锁可能有用吗?

澄清问题:

  • 请忽略可重入的锁。恰好递归是由可重入锁提供的。
  • 我指的是锁的递归特性
  • 请不要回答为什么使用可重入锁。
  • 请不要回答“递归不是可重入锁的主要特征”
  • 我想知道什么情况需要递归获取锁,不管锁是否可重入。
0 投票
0 回答
47 浏览

java - 避免多次锁定尝试java

我有以下方法:

我需要重写此方法以获取另一个参数。

我的问题是,如何在不获得两次锁的情况下实现这一点(以防调用第二种方法)?我不想更改原始方法的签名,因为这意味着在系统中的 10 个不同位置进行更改。我会很感激任何想法。如果需要,我可以就这个问题提供更多说明。谢谢。