SynchronousQueue 源码初步分析
程序员文章站
2022-07-12 19:34:52
...
简介:
就是一个 put 操作必须和 take 操作对应. 如果一下来了三个 put 操作,那么结果是这样的:
head->put1->put2->put3.
put1/put2/put3 都自旋一小会,如果还没有 take 来的话,就都调用 LockSupport.part 自我阻塞.
实现原理:
基于队列的实现原理:
还是上面的那个例子,假设一次性来了三个 put 操作,那么结果是这样的:
head->put1->put2->put3.
现在假设来了一个 take 操作,那么对首出队,唤醒第一个节点的线程. put1 这个操作就能够继续执行了.
数据结构:
因为 SynchronousQueue 把和执行 put 操作的线程放在了数据结构中了,所以当这个线程被阻塞的时候,take 就能唤醒指定的线程.
就是一个 put 操作必须和 take 操作对应. 如果一下来了三个 put 操作,那么结果是这样的:
head->put1->put2->put3.
put1/put2/put3 都自旋一小会,如果还没有 take 来的话,就都调用 LockSupport.part 自我阻塞.
实现原理:
基于队列的实现原理:
还是上面的那个例子,假设一次性来了三个 put 操作,那么结果是这样的:
head->put1->put2->put3.
现在假设来了一个 take 操作,那么对首出队,唤醒第一个节点的线程. put1 这个操作就能够继续执行了.
数据结构:
因为 SynchronousQueue 把和执行 put 操作的线程放在了数据结构中了,所以当这个线程被阻塞的时候,take 就能唤醒指定的线程.
上一篇: AtomicInteger 源码分析
下一篇: 线程的状态