问题标签 [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 回答
434 浏览

java - Java synchronized statement

I need a threadsafe arraylist like this.

According to java doc, when using Collections.synchronizedList one needs to synchronize each access to the list. I'm not sure whether my synchronized blocks will do this?

  1. Is my use of synchronized blocks equivalent to

    /li>
  2. Should I use a ReentrantLock like this

    /li>
0 投票
0 回答
230 浏览

java - 在 Java 中使用 ReentrantLock 锁定

我正在尝试在 java 中的播放列表中实现。唯一的问题是 populatePlaylist() 有点慢,需要锁定。我已经编写了这段代码,但它似乎不起作用。

当第二次调用构造函数时,它只会执行所有代码,即使从未调用过 unlock()。

编辑:这是我尝试做的。播放列表类只是播放列表的表示(惊喜:))。生成播放列表可能有点慢,所以我在程序的不同部分之间共享播放列表类,以避免多次加载播放列表。是的,播放列表在每个线程中只创建一次。一种是 UI 模式,一次是后台线程,一次是其他地方。

播放列表是静态的。在“populateplaylist”中,代码​​看起来有点像这样:

0 投票
1 回答
33 浏览

api - 关于以下 API ReentranReadWriteLock 的说明

直接来自这个API

当构造为公平时,线程使用近似到达顺序策略竞争进入。当当前持有的锁被释放时,等待时间最长的单个写入线程将被分配写入锁,或者如果有一组读取线程等待的时间比所有等待写入线程的时间长,则将为该组分配读取锁。

它将单个写入线程与一组读取线程进行比较。如果只有一个等待线程而不是 API 指定的一组线程会怎样。它会改变任何东西还是同时指代单个线程和一组线程?

提前致谢。

0 投票
5 回答
13849 浏览

java - 对 ReentrantLock 实际使用 lockInterruptibly

您实际使用这种方法是lockInterruptibly什么?我已经阅读了API,但是对我来说不是很清楚。有人可以用其他语言表达吗?

0 投票
1 回答
634 浏览

java - 公平性能保证 FIFO 调度吗?

直接从这个网站

但是,如果我们在创建新的 ReentrantLock 对象时将公平参数指定为“true”,则可以保证等待时间最长的线程接下来会获得锁。听起来不错吧?

我认为它永远无法保证,它只会影响调度程序的决定。是不是还是上面链接的网站说的是真的?

提前致谢。

0 投票
3 回答
1319 浏览

java - 发信号通知处于锁状态的线程

我从这个API中获得了以下几点,我想知道以下两点之间的区别:

  1. 等待线程以 FIFO 顺序发出信号。

  2. 从等待方法返回的线程重新获取锁的顺序与最初获取锁的线程相同,在默认情况下未指定,但对于公平锁,优先考虑那些等待时间最长的线程。

它与Condition通常由 ReentrantLock 方法返回的类有关,我引用它的部分解释了 Object 类.newCondition()的方法和常规监视器方法之间的区别。Condition

“等待线程以 FIFO 顺序发出信号”。我认为只要 alock被创建是否公平,等待线程以 FIFO 顺序发出信号的事实是完全不相关的,不是吗?因为无论如何,它们是否已构建,公平与否,决定了它们如何排队。

只是要求确认。

提前致谢。

0 投票
1 回答
3409 浏览

java - 可重入锁 await 和 signalAll 方法

为什么以下非常简单的代码不起作用..它卡住了..我正在尝试使用显式锁java.util.concurrent.locks.ReentrantLock;及其newCondition()方法。

这是我的代码:

我正在锁定同一个锁,所以它应该可以工作......相反,当它调用时它在主线程中被阻塞incrementVariable()。为什么会发生这样的事情?提前致谢。

0 投票
2 回答
191 浏览

multithreading - 为什么我们需要一个锁才能重入?

我在这里了解(有点)jdk 5 ReentrantLock 的功能

但是为什么我们想要一个“重入”锁呢?即如果一个线程已经拥有一个对象的锁,为什么它需要再次获取它?

0 投票
2 回答
270 浏览

java - ReentrantLock 说“解锁”但第一个线程停止

我们在 ReentrantLock 上调用“lock()”,而线程显然不应该被卡在那里。

在调用“lock()”之前使用断点进行调试时,第一个线程将停在那里,程序指针指向“Thread.exit()”。锁定对象的 toString() 表示“未锁定”,它的“状态”属性为“0”。行为并不总是相同的。有时第一个线程会按预期通过锁。

0 投票
3 回答
2755 浏览

java - 条件会产生每个对象有多个等待集的效果吗?

我正在阅读有关 Condition 的信息java.util.concurrent.locks.Condition

条件将对象监视器方法(等待、通知和通知所有)分解为不同的对象,通过将它们与任意锁定实现的使用结合起来,使每个对象具有多个等待集的效果。

有人可以解释一下吗?

与普通同步块或方法相比,这有什么好处?