`

SynchronousQueue妙用

    博客分类:
  • java
阅读更多

创建ThreadPoolExecutor时,Executors.newFixedThreadPool()默认采用的是LinkedBlockingQueue,如果工作者线程处于忙碌状态,新任务将放入队列中等候,队列满了之后,才可能创建新的线程。

 

有时我们希望绕开队列,直接分配接收者线程,此时可采用SynchronousQueue,只要当前池的大小还小于最大值,ThreadPoolExecutor就会创建新线程。

 

SynchronousQueue并不是真正的队列,而是一种管理直接在线程之间移交信息的机制,Executors.newCachedThreadPool()工厂就采用的这种机制。

分享到:
评论

相关推荐

    java 同步器SynchronousQueue详解及实例

    2. 定时生产者消费者问题:使用 SynchronousQueue 可以实现定时生产者消费者问题,生产者将元素放入队列中,并指定超时时间,而消费者则从队列中取出元素。 SynchronousQueue 的使用方法: 生产者: ```java ...

    SynchronousQueue实现原理.pdf

    SynchronousQueue的实现原理与Java其他阻塞队列(如ArrayBlockingQueue、LinkedBlockingDeque)不同,它并没有使用AQS(AbstractQueuedSynchronizer)来实现线程间的协作,而是直接利用CAS(Compare-And-Swap)操作...

    SynchronousQueue详解

    在实际使用中,SynchronousQueue的性能非常高,因为它不涉及任何实际的数据存储和查找操作,所有操作都是通过原子的线程交互完成的。但是,由于其阻塞特性,如果线程池配置不当,可能会导致线程饥饿或者死锁。因此,...

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

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

    Android开发经验谈:并发编程(线程与线程池)(推荐)

    Android开发经验谈:并发编程(线程与线程池) Android开发中,线程和线程池是两个非常重要的概念。...* ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等队列的使用方法

    一个小的java Demo , 非常适合Java初学者学习阅读.rar

    同步队列 SynchronousQueue,阻塞双端队列 BlockingDeque, 链阻塞双端队列 LinkedBlockingDeque,并发 Map(映射) ConcurrentMap, 并发导航映射 ConcurrentNavigableMap,交换机 Exchanger, 信号量 Semaphore,执行器...

    java并发工具包 java.util.concurrent中文版用户指南pdf

    7. 同步队列 SynchronousQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. ...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf

    同步队列 SynchronousQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航 映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. ...

    Thread基础知识点笔记总结

    Thread 基础知识点笔记总结 Thread 是 Java 中最...传统生产者消费者问题可以用 lock 和 condition 一起控制,用 condition 的 await()和 signal()对生产者和消费者进行等待和唤醒,保证生产一个数据消费一个数据。

    阿里各岗位技术面试题含答案最新.docx

    SynchronousQueue 是一个特殊的 BlockingQueue,它不存储任何元素,所有的插入操作必须等到其他线程进行相应的删除操作才能完成。在给定的代码中,试图向空的 SynchronousQueue 添加三个元素(1, 2, 3)并尝试取出...

    知识点总结1

    3. newCachedThreadPool:将 corePoolSize 设 置 为 0,将 maximumPoolSize 设 置 为 Integer.MAX_VALUE,使 用 的 SynchronousQueue。这样可以根据需要动态创建和销毁线程,每个线程都有一个缓存时间,当线程空闲...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版pdf

    java.util.concurrent包提供了多种BlockingQueue的实现,包括ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue和SynchronousQueue。每个实现都有其特定的用例和特性,例如...

    2004_DISC_dual_DS.pdf

    他们应用了线性化的经典理论来分析那些需要等待其他线程来建立前置条件的操作,使用“请求”和“后续”这一对操作来建模,并分别考虑请求的成功后续以及二者之间的时期,从而获得了非阻塞双数据结构的有意义定义。...

    Java并发工具包java.util.concurrent用户指南中英文对照阅读版

    7. 同步队列 SynchronousQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. ...

    java.util.concurrent 实现线程池队列

    本篇文章将深入探讨如何使用`java.util.concurrent` 实现线程池队列,以及其中的关键概念和技术。 线程池是一种线程使用模式,通过预先创建并维护一定数量的工作线程来避免频繁创建和销毁线程的开销。在Java中,`...

    java线程大总结[汇编].pdf

    `ArrayBlockingQueue`、`DelayQueue`、`LinkedBlockingQueue`、`PriorityBlockingQueue`和`SynchronousQueue`都是`BlockingQueue`的不同实现,每种实现都有其特定的特性,比如`ArrayBlockingQueue`是基于数组的,而`...

    java并发编程.docx

    2. CachedThreadPool:可缓存线程池,会自动回收线程,核心线程数为0,最大线程数为Integer.MAX_VALUE,使用SynchronousQueue,不存储任务,适合执行短生命周期的任务。 3. ScheduledThreadPool:支持定时和周期性...

    java并发包资源

    7. 同步队列 SynchronousQueue 8. 阻塞双端队列 BlockingDeque 9. 链阻塞双端队列 LinkedBlockingDeque 10. 并发 Map(映射) ConcurrentMap 11. 并发导航映射 ConcurrentNavigableMap 12. 闭锁 CountDownLatch 13. ...

    java线程池threadpool简单使用源码

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

    java自带的四种线程池.doc

    - 使用`SynchronousQueue`作为任务队列,这个队列实际上不存储任务,而是将任务直接交给线程处理。当线程过多,可能导致内存溢出。 4. `newScheduledThreadPool`: - 用于执行定时或周期性的任务,核心线程数可由...

Global site tag (gtag.js) - Google Analytics