当前位置: 首页 > 面试题库 >

使用LockSupport和AbstractQueuedSynchronizer的任何实际示例?

莫承运
2023-03-14
问题内容

伙计们,有人可以举一个LockSupport&的简单实用示例AbstractQueuedSynchronizer吗?javadocs中给出的示例非常繁琐。

Semaphore我理解许可证的使用。

感谢您的任何回复。


问题答案:

如果您要谈论使用锁定机制(甚至同步屏障),请使用java.util.concurrent.Lock。明显的建议是向ReentrantLock代表的用户a
Synch。同步是一个AQS,它依次使用LockSupport

一切都在您的幕后完成。

编辑:

我们不讨论AbstractQueuedSynchronizer(AQS)的实际用途。

尽管并发构造的用法可能非常不同,但它们都可以具有相同的基础功能。

即在某些条件下停放此线程。在其他情况下,唤醒线程。

这是一组非常广泛的指令,但是很显然,大多数并发结构都需要一些通用功能,这些功能才能为它们处理这些操作。输入AQS。有五个主要的同步障碍。

  • ReentrantLock
  • ReadLock
  • WriteLock
  • Semaphore
  • CountDownLatch

现在,所有这五个结构在使用它们时都具有非常不同的规则集。A
CountdownLatch可以允许许多线程同时运行,但可以强制一个(或多个)线程等待,直到至少n个线程在所述锁存器上递减计数为止。

ReentrantLock 一次只强制一个线程进入关键部分,并将所有其他线程排队,以等待其完成。

ReadLock 允许任意数量的读取线程进入临界区,直到获得写锁为止。

这些示例可以继续进行,但是这里的大背景是它们都使用AQS。这是因为他们能够使用AQS提供的原始功能,并在其之上实现更复杂的功能。AQS允许您停放和唤醒线程(如果需要,可以中断线程),但是可以支持许多复杂的功能。



 类似资料:
  • 问题内容: 特性已成为PHP5.4的最大新增功能之一。我了解语法并了解特性背后的思想,例如将水平代码重用于日志,安全性,缓存等常见内容。 但是,我仍然不知道如何在项目中利用特质。 是否有任何已经使用了特征的开源项目?关于如何使用特征构造体系结构的任何好的文章/阅读材料? 问题答案: 我个人的观点是,在编写简洁的代码时实际上很少使用特质。 与其使用特征将代码入侵到类中,不如通过构造函数或setter

  • 问题内容: 我们的一位培训人员在解释CountDownLatch和CyclicBarrier之间的区别时给出了一个示例。 :假设一块石头可以举起10个人,那么您将等待所有10个人来来。然后只有您才能抬起石头。 :如果您要去野餐,则需要首先在某个共同点上认识,从这里大家开始旅程。 如果有人同意这些意见,请给我一些细节。 我已经阅读了这两个类的sun API。但我需要更多解释。 问题答案: 关键区别在

  • 问题内容: 我一直在CROSS / OUTER APPLY和一位同事一起研究,我们正在努力寻找在何处使用它们的真实示例。 我已经花了很多时间研究什么时候应该在内部联接上使用交叉申请?和谷歌搜索,但主要的(唯一的)示例似乎很奇怪(使用一个表中的行数来确定要从另一个表中选择多少行)。 我认为这种情况可能会受益于OUTER APPLY: 联系人表(每个联系人包含1条记录)通信条目表(每个联系人可以包含n

  • 问题内容: 我正在使用nodejs和express建立一个网站。如何使页面中的划分动态化?是用玉吗?如果没有怎么做,angularjs是做什么用的?请帮助我在Google上搜索了很多东西,但我不清楚它们的用法。 问题答案: Jade在 服务器端 创建浏览器中使用的html 。浏览器执行对Web服务器的请求,Web服务器执行Jade,Jade将生成将发送到浏览器的html。在过去约20年中,这种 服

  • 问题内容: 希望我能得到最简单的示例代码,该示例代码将演示如何使用LMAX干扰器(http://code.google.com/p/disruptor/)。 不幸的是,每段代码都是过时的。有人知道吗,在哪里可以找到最新的小型方法(最好不使用DSL)? 问题答案: 您可以在此处查看示例。 http://code.google.com/p/disruptor/wiki/CodeExampleDisru

  • 本文向大家介绍Python装饰器使用示例及实际应用例子,包括了Python装饰器使用示例及实际应用例子的使用技巧和注意事项,需要的朋友参考一下 测试1 deco运行,但myfunc并没有运行 测试2 需要的deco中调用myfunc,这样才可以执行 测试3 @函数名 但是它执行了两次 测试4 这样装饰才行 测试5 @带参数,使用嵌套的方法 测试6 函数参数传递 测试7 未知参数个数 测试8 cla