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

Max*_*Max 12 java concurrency

伙计们,任何人都可以给出一个简单实用的例子LockSupportAbstractQueuedSynchronizer使用方法吗?javadocs中给出的示例非常紧张.

Semaphore我理解许可证的使用.

谢谢你的回复.

Joh*_*int 15

如果你在谈论使用锁定机制(甚至同步障碍),只需使用一个java.util.concurrent.Lock.明显的建议是用户a ReentrantLock委托给a Synch.同步是AQS,而AQS又使用LockSupport.

这一切都在你的掩护下完成.

编辑:

不,让我们AbstractQueuedSynchronizer回顾一下(AQS)的实际用途.

虽然并发构造在它们的使用方面可能非常不同,但它们可以具有相同的底层函数.

即在某种情况下停放此线程.在某些其他情况下唤醒一个线程.

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

  • ReentrantLock
  • ReadLock
  • WriteLock
  • Semaphore
  • CountDownLatch

现在,所有这五种结构在使用时都有不同的规则.A CountdownLatch可以允许许多线程同时运行但强制一个(或多个)线程等待,直到所述锁存器上至少n个线程倒计数.

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

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

这些例子可以继续,但这里的大图是他们都使用AQS.这是因为它们能够使用AQS提供的原始函数,并在其上实现更复杂的功能.AQS允许你停放unpark并唤醒线程(如果需要可以中断),但这样你可以支持许多复杂的功能.

  • @Max LockSupport是一个任何人都可以使用的实用程序类.它不一定是内部类Unsafe.java是内部类的一个很好的例子.LockSupport是公共的,以便其他人可以编写自己的AQS版本 (2认同)