`

SynchronousQueue 源码初步分析

阅读更多
简介:
就是一个 put 操作必须和 take 操作对应. 如果一下来了三个 put 操作,那么结果是这样的:

head->put1->put2->put3.

put1/put2/put3 都自旋一小会,如果还没有 take 来的话,就都调用 LockSupport.part 自我阻塞.


实现原理:

基于队列的实现原理:

还是上面的那个例子,假设一次性来了三个 put 操作,那么结果是这样的:

head->put1->put2->put3.

现在假设来了一个 take 操作,那么对首出队,唤醒第一个节点的线程. put1 这个操作就能够继续执行了.

数据结构:

因为 SynchronousQueue 把和执行 put 操作的线程放在了数据结构中了,所以当这个线程被阻塞的时候,take 就能唤醒指定的线程.
0
0
分享到:
评论

相关推荐

    SynchronousQueue核心属性和方法源码的分析

    SynchronousQueue核心属性和方法源码的分析的代码

    java 同步器SynchronousQueue详解及实例

    Java 同步器 SynchronousQueue 详解及实例 Java 中的同步器 SynchronousQueue 是一种特殊的阻塞队列,它最多只能放一个元素,这个元素如果不在特定的时间消费掉就会被删除,队列的长度始终为 0。SynchronousQueue ...

    SynchronousQueue实现原理.pdf

    在详细分析SynchronousQueue之前,先来看看生产者-消费者模式。这是并发编程中一个核心的概念,生产者负责生成数据并放入队列,而消费者则从队列中取出数据并处理。在传统的生产者-消费者模式中,队列充当了生产者和...

    JDK之ThreadPoolExecutor源码分析1

    《JDK之ThreadPoolExecutor源码分析1》 在Java编程中,线程池是一种高效的管理线程的方式,它通过复用已存在的线程来避免频繁创建和销毁线程带来的开销。ThreadPoolExecutor作为Java中的线程池实现,其内部机制相当...

    SynchronousQueue详解

    与Exchanger相比,SynchronousQueue同样允许两个线程间交换数据,但Exchanger是在两个线程交换数据后才继续执行,而SynchronousQueue则是实时交换,一旦一个线程完成其操作,另一个线程立即接手。 SynchronousQueue...

    Java线程池,正式上线运行的源码,分享欢迎使用并提意见

    根据不同的应用场景,可以选择不同类型的队列,如无界队列(LinkedBlockingQueue)、有界队列(ArrayBlockingQueue)或同步队列(SynchronousQueue)。 线程池的工作流程大致如下: 1. 当一个任务被提交到线程池时...

    java线程池threadpool简单使用源码

    常见的工作队列有`ArrayBlockingQueue`、`LinkedBlockingQueue`和`SynchronousQueue`等。选择哪种队列取决于应用的需求,如是否需要限制并发数量、任务提交速度与处理速度的关系等。 5. **ThreadGroup**:在Java中...

    JavaThreaddemo_DEMO_tidecme_线程池Java_源码.zip

    - **workQueue**: 用于存放等待执行的任务的阻塞队列,常见的有ArrayBlockingQueue、LinkedBlockingQueue和SynchronousQueue等。 - **threadFactory**: 创建新线程的工厂,用于定制线程的创建行为。 - **handler*...

    java线程池源码-java-source:Java源码学习多线程、线程池、集合

    通过分析Java线程池源码,我们可以学习到如何合理配置线程池参数,如何选择合适的工作队列,以及如何处理拒绝策略,从而在实际开发中更好地利用多线程来提高程序效率。此外,源码阅读也有助于理解Java并发库的设计...

    汪文君高并发编程实战视频资源全集

     高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4  高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4  高并发编程第三阶段13讲 一个JNI程序的编写,通过...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段11讲 AtomicXXXFieldUpdater源码分析及使用场景分析.mp4  高并发编程第三阶段12讲 sun.misc.Unsafe介绍以及几种Counter方案性能对比.mp4  高并发编程第三阶段13讲 一个JNI程序的编写,通过...

    JAVA线程池的分析和使用

    - **runnableTaskQueue**:用于存放待处理任务的阻塞队列,如ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。 - **ThreadFactory**:创建线程的工厂,可以定制线程属性。 - **...

    2004_DISC_dual_DS.pdf

    标题《2004_DISC_dual_DS.pdf》和描述“SynchronousQueue 底层算法相关实现论文”暗示了文档与Java并发编程中的非阻塞同步队列实现及其底层算法相关。从提供的部分内容,我们可以看出,文档讨论了线性化的经典理论...

    10、阻塞队列BlockingQueue实战及其原理分析.pdf

    ### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中`java.util.concurrent`包下提供的一种重要的线程安全队列。它继承自`Queue`接口,并在此基础上...

    14-阻塞队列BlockingQueue实战及其原理分析二.pdf

    3. SynchronousQueue:一个不存储元素的阻塞队列,生产者和消费者需要同时存在。 4. PriorityBlockingQueue:一个带有优先级的阻塞队列,元素的优先级高的先出队。 5. DelayQueue:一个延迟阻塞队列,元素只有在延迟...

    java队列之queue用法实例分析

    SynchronousQueue是一个利用BlockingQueue接口的简单聚集(rendezvous)机制。 Queue接口中的操作可以分为以下几类: 1. add、remove、element操作:在你试图为一个已满的队列增加元素或从空队列取得元素时抛出...

    线程池调用队列

    线程池调用队列是多线程编程中一个重要的概念,它在处理并发任务时起着关键作用。...此外,通过分析线程池的源码,可以帮助我们深入理解其内部工作机制,以便在遇到性能问题时能更精准地定位和解决。

    Java多线程(五)之BlockingQueue深入分析

    4. SynchronousQueue:特殊的BlockingQueue,对其的操作是放和取交替完成的。 五、具体Block 在实际开发中,BlockingQueue可以用来实现生产者-消费者模式,或者用来实现线程池的任务队列等。BlockingQueue可以为...

    详解Java线程池和Executor原理的分析

    CachedThreadPool的实现是基于SynchronousQueue的,而FixedThreadPool的实现是基于LinkedBlockingQueue的。 总结 Java线程池和Executor原理是Java并发编程中非常重要的一部分。理解线程池的作用和实现可以帮助大家...

Global site tag (gtag.js) - Google Analytics