各位,能否给一个简单的实际示例说明LockSupport
和AbstractQueuedSynchronizer
的用法?在Javadoc中给出的示例相当繁琐。
Semaphore
许可的使用对我来说是明确的。
感谢任何回应。
各位,能否给一个简单的实际示例说明LockSupport
和AbstractQueuedSynchronizer
的用法?在Javadoc中给出的示例相当繁琐。
Semaphore
许可的使用对我来说是明确的。
感谢任何回应。
java.util.concurrent.Lock
。明显的建议是使用ReentrantLock
,它委托给一个 Synch
。 Synch 是 AQS,而 AQS 再次使用 LockSupport
。ReentrantLock
- ReadLock
- WriteLock
- Semaphore
- CountDownLatch
现在,所有这五种结构在使用时都有非常不同的规则。 CountdownLatch
可以允许多个线程同时运行,但会强制一个或多个线程等待,直到至少n个线程在该门闩上计数。
ReentrantLock
只强制一个线程进入关键节,而将所有其他线程排队等待其完成。
ReadLock
允许任意数量的读取线程进入关键节,直到获得写锁。它们并不适用于客户端代码的直接使用,更多地是为了帮助构建新的并发类。
Disruptor的2.7版本使用LockSupport.parkNanos而不是Thread.sleep来降低延迟:
AbstractQueuedLongSynchronizer
中使用了LockSupport
,你认为它是一种内部 API 类吗?我想看看有关它的任何说明性代码... - MaxAbstractQueuedSynchronizer
似乎不太清楚。 - Max