reentrantlock相关内容

同步块是否有最大可重入限制?

众所周知,ReentrantLock 有一个最大可重入限制:Integer.MAX_VALUE;synchronized 块是否也有可重入限制? 更新:我发现很难为同步重入编写测试代码: 公共类 SyncReentry {公共静态无效主要(字符串[]参数){同步(SyncReentry.class){同步(SyncReentry.class){//...永远写同步块}}}} 任何人都可以 ..
发布时间:2022-01-22 20:13:06 Java开发

Java ReentrantLock 和条件 |生产者完成工作,消费者陷入困境

一般信息:三个读取器线程以块的形式从文件中随机读取,其中每个块都有一个 ID,并且它们写入普通的 ArrayList.只要将具有所需 ID 的块添加到列表中,写入器线程就会写入输出文件. 出于这个原因,我编写了一个 BlockingChunkList,它应该同步 add() 和 getNextChunk() 方法. 在一种情况下它适用于同步 + 通知 + notifyAll 和另一种情 ..

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

我正在阅读 java.util.concurrent.locks.Condition 中的 Condition. 条件因素将对象监视器方法(等待、通知和通知所有)>分解为不同的对象,以产生具有多个的效果每个对象的等待集,通过将它们与任意锁的使用结合起来实现. 有人可以解释一下吗? 与普通同步块或方法相比,这有什么好处? 解决方案 一个锁可以关联多个条件.锁是一个“对象", ..

内部存储在“公平"和“不公平"锁之间的差异

具有Reentrant(true)类锁的Lock接口的工作方式是,它使用 BlockingQueue 存储要获取 lock 的线程.这样,“先到先出" -FIFO的线程.一切都清楚了. 但是“不正当锁"在哪里,或者ReentrantLock(false).它们的内部实现是什么?OS如何决定现在选择哪个线程?最重要的是,这些线程现在是否也存储在队列中或存储在何处?(它们必须在某处) 解决 ..
发布时间:2021-05-18 20:17:58 Java开发

正确实施乒乓游戏

我在一项作业中被要求实施10次正确的乒乓球游戏,该游戏正确地调用了"ping"和"pong"(意思是在ping之前没有pong).意思是,控制台中的最终输出应该是:"ping!(1)","pong!(1)","ping!(2)","pong!(2)"等. 需求是使用信号量,reetrantlock和倒数锁存器实现gamepingpongthread. 我的问题是打印顺序并非总是按要求进 ..
发布时间:2021-04-23 20:38:21 Java开发

Java ReentrantLock和条件生产者完成工作,消费者陷入困境

常规信息: 三个读取器线程从文件中随机读取数据块,每个数据块都有一个ID,它们分别写入普通的ArrayList。一旦将具有所需ID的块添加到列表中,编写器线程就会写入输出文件。 由于这个原因,我编写了一个BlockingChunkList来同步add()和getNextChunk()方法。 在一种情况下,它适用于我使用sync + notify + notifyAll,而在另一种情况 ..

为什么锁被捕获到局部变量

在Java JRE中,我看到了private final ReentrantLock lock; public E poll() { final ReentrantLock lock = this.lock; lock.lock(); 为什么锁被捕获到私有变量?我只希望 public E poll() { lock.lock(); 解决方案 主要是为了确保最佳性能 ..
发布时间:2020-07-05 20:14:56 Java开发

ReentrantLock无法正常工作

我不知道为什么代码无法正常工作.问题在于ReentrantLock不会锁定ThreadClass.run()中的方法调用. 资源类,假定哪些方法已锁定在ThreadClass中 public class ResourceClass { private int i; public void setIncrement() { i++; } ..
发布时间:2020-07-05 20:14:49 Java开发

制作静态ReentrantLocks

前段时间,我偶然发现了该线程:是否对创建private static final ReentrantLock lock不被视为代码气味感兴趣?我已经读过静态变量是邪恶的,但是我目前正在使用的用例Im看起来是使用它的理想场所. 有人愿意帮助吗? 编辑详细信息:我有这个课程,称为FileProcessor,它在另一个线程中执行给定的工作.我的用例是分解此类的一些实例并完成这些工作.但是我要 ..
发布时间:2020-05-14 01:01:48 Java开发

java.concurrent.ReentrantLock-为什么我们要多次获取相同的锁

我知道是否使用ReentrantLock,它允许同一线程多次获取同一锁.在内部,它有一个计数器来计算锁获取的次数.如果两次获取相同的锁,则需要释放两次.但是我的问题是,为什么有人要多次获取锁,一次获取就足够了吗?有人可以给我一个常见的用例吗? 解决方案 请考虑以下情况,在这种情况下,您需要一组不是原子的操作,而是原子的.例如,您可能想要设置一个数组的值,但是在设置时返回其当前值. (为简洁 ..
发布时间:2020-05-13 21:26:23 Java开发

在方法的本地范围内创建的ReentrantLock对象将如何工作?

以上是OCP 7 java se书的屏幕打印.第791页. 我的问题是,是否每次在方法中创建一个新的ReentrantLock对象并将其锁定,如何阻止两个线程在lock和unlock之间运行代码块?这两个线程不会分别创建一个ReentrantLock对象并将其锁定吗?我可以想象,如果lock对象是仅实例化一次且从未更改的实例变量,它将如何工作. (最好是final). 我误会了吗? ..

如何通过GCD在Objective-C中实现可重入锁定机制?

我有一个带有一些方法的Objective-C类,这些类使用GCD队列来确保对资源的并发访问是串行进行的(执行此操作的标准方法). 其中一些方法需要调用同一类的其他方法.因此,锁定机制需要重新输入.有标准的方法吗? 起初,我使用了每种方法 dispatch_sync(my_queue, ^{ // Critical section }); 同步访问.如您所知,当这些方 ..

条件是否为每个对象提供多个等待集?

我正在阅读中的条件java.util.concurrent.locks.Condition 。 条件因素将对象监视器方法(wait,notify和notifyAll)>分解为不同的对象,以通过将它们与使用任意Lock $ b相结合来实现每个对象具有多个 等待集的效果$ b实现。 有人能解释一下吗? 这是怎么回事是否优于普通同步块或方法? 解决方案 一个锁可以与许多条件相 ..
发布时间:2019-01-02 10:10:19 Java开发

对于ReentrantLock,实际使用lockInterruptibly

您实际使用此方法 lockInterruptibly ?我已阅读 API 但是对我来说不是很清楚。换句话说,有人可以表达吗? 解决方案 逻辑与所有可中断的阻塞方法相同:它允许线程到立即对从另一个线程发送给它的中断信号做出反应。 如何使用此特定功能取决于应用程序设计。例如,它可以用来杀死池中的一些线程,这些线程都在等待获取锁定。 ..
发布时间:2018-12-26 15:04:55 Java开发

为什么使用ReentrantLock如果可以使用synchronized(this)?

如果你可以使用 synchronized(this),我想了解什么使得锁的并发性非常重要。在下面的虚拟代码中,我可以做: 同步整个方法或同步易受攻击的区域。}) 使用ReentrantLock锁定易受攻击的代码区域。 / p> private final ReentrantLock lock = new ReentrantLock private static List ..
发布时间:2016-12-26 14:18:45 Java开发