- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Java中,如果多个线程await()同一个conditionA,然后另一个线程对conditionA调用signalAll(),所有等待conditionA的线程会同时解锁吗?
例如,我有一个队列的添加和删除方法:
public void add(E newValue) throws InterruptedException
{
queueLock.lock();
try
{
while (size == elements.length)
spaceAvailableCondition.await();
elements[tail] = newValue;
tail++;
size++;
if (tail == elements.length)
tail = 0;
valueAvailableCondition.signalAll();
}
finally
{
queueLock.unlock();
}
}
public E remove() throws InterruptedException
{
queueLock.lock();
try
{
while (size == 0)
valueAvailableCondition.await();
E r = (E) elements[head];
head++;
size--;
if (head == elements.length)
head = 0;
spaceAvailableCondition.signalAll();
return r;
}
finally
{
queueLock.unlock();
}
}
假设多个线程不断调用共享队列上的 add 方法。不一会儿,队列就满了。所有这些线程都卡在 spaceAvailableCondition.awati()
处。然后,我有一个线程调用方法remove、signalAll()
和spaceAvailableCondition
。所有调用 add 的线程都会解锁并运行该方法,这会导致该队列损坏吗?
我问这个问题是因为我认为所有其他“添加线程”都已经实现了queueLock.lock()
。那么所有的线程都拥有这个锁的所有权。
最佳答案
不确定我是否理解你的问题。
虽然await
ing线程会被signalAll()
唤醒,但只有其中一个能够重新获取锁(我假设是 >queueLock
)与那些线程正在等待的spaceAvailableCondition
相关联。因此,只有 1 个“添加”线程将执行逻辑。
关于java - 在Java中,多个线程await()相同的条件会在稍后同时被解锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35075470/
我正在编写一个插件,有一个ajax调用向用户显示数据。 如果用户想在ajax成功时添加一些js?他可以从他的 js 脚本中做到这一点吗,比如定位这个 ajax 成功事件。 例如: $(documen
我有 html 代码,例如 - x 最初插入 div 'insert_calendar_eda_form'。 Javascript代码 calendar_eda_add
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我已经使用命令 sudo start myservice 启动了一个 upstart 服务。我想要一种方法,以便稍后我(或任何人)可以检查该服务是否已启动并正在运行。检查它的命令是什么? 最佳答案 找
我是一名优秀的程序员,十分优秀!