各位,有没有人能给出一个简单的LockSupport和AbstractQueuedSynchronizer使用的实际例子?在javadocs中给出的例子是相当紧张的。
我理解Semaphore许可的用法。
感谢您的回复。
发布于 2010-07-23 01:55:19
如果您正在谈论使用锁定机制(甚至是同步障碍),只需使用java.util.concurrent.Lock即可。最明显的建议是使用委托给Synch的ReentrantLock。同步是AQS,而AQS又使用LockSupport。
这一切都是在幕后为你做的。
编辑:
不,让我们来看看AbstractQueuedSynchronizer的实际用法。
尽管并发构造的用法可能非常不同,但它们都可以具有相同的底层功能。
也就是说,在某些情况下,驻留此线程。在其他一些情况下,唤醒线程。
这是一个非常广泛的指令集,但很明显,大多数并发结构都需要一些能够为它们处理这些操作的通用功能。输入AQS。有五个主要的同步障碍。
ReentrantLockReadLockWriteLockSemaphoreCountDownLatch现在,所有这五种结构在使用它们时都有非常不同的规则集。CountdownLatch可允许多个线程同时运行,但强制一个(或多个)线程等待,直到至少n个线程在所述锁存器上倒计时。
ReentrantLock一次只强制一个线程进入临界区,并将所有其他线程排入队列,等待其完成。
ReadLock允许任意数量的读线程进入临界区,直到获得写锁定。
示例还可以继续,但这里的总体情况是它们都使用AQS。这是因为他们能够使用AQS提供的原始函数,并在其上实现更复杂的功能。AQS允许您驻留、解除驻留和唤醒线程(如果需要,可以中断),但以这样一种方式,您可以支持许多复杂的功能。
发布于 2010-07-23 02:09:15
它们不能直接在客户机代码中使用;更多的目的是帮助构建新的并发类。
发布于 2010-07-23 09:42:33
AQS是一个很好的构建并发原语的类-但它很复杂,需要一些学习才能正确使用它。我已经把它用在了一些东西上,比如lazy initialisation和一个简单的快速reusable latch。
尽管它很复杂,但我不认为AQS特别含糊,它有出色的javadoc来描述如何正确使用它。
https://stackoverflow.com/questions/3311811
复制相似问题