首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ThreadPoolExecutor 线程池配置 阻塞队列BlockingQueue

[JDK] ThreadPoolExecutor 线程池配置 阻塞队列BlockingQueue 创建和配置 ExecutorService 执行器服务,它使用可能的几个池线程之一执行每个提交的任务...每个ThreadPoolExecutor 还维护着一些基本的统计数据,如完成的任务数。 为了便于跨大量上下文使用,此类提供了很多可调整的参数扩展挂钩。...否则,在手动配置调整此类时,使用以下指导: 核心最大池大小 ThreadPoolExecutor 将根据 corePoolSize(参见 getCorePoolSize()) maximumPoolSize...队列大小最大池大小可能需要相互折衷:使用大型队列小型池可以最大限度地降低CPU 使用率、操作系统资源上下文切换开销,但是可能导致人工降低吞吐量。...任务排队有3种基本方法:无限队列、有限队列同步移交。

2.1K20

源码剖析ThreadPoolExecutor线程池及阻塞队列

本文章对ThreadPoolExecutor线程池的底层源码进行分析,线程池如何起到了线程复用、又是如何进行维护我们的线程任务的呢?...我们直接进入正题:  首先我们看一下ThreadPoolExecutor类的源码 1 public ThreadPoolExecutor(int corePoolSize, 2...根据传进来的任务参数判断是请求数据,还是存入数据//第二步:如果是存入数据,空节点时直接返回null,让线程池创建worker线程运行任务,如果有等待节点,那么存入当前任务数据,并且再移除存入的数据节点等待的节点...而PriorityBlockingQueueDelayQueue,虽然内部都使用了PriorityQueue作为存储介质,但是PriorityBlockingQueue不会强制要求你使用哪一种比较器,...最后说一下SynchronousQueue,该队列比其他队列特殊一点,该队列是同步类型的队列,就是说队列不存储任务数据,而是必须有正在获取的等待节点才会让数据暂时放入队列中然后立马取出,或者不会放入队列

17431
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ThreadPoolTaskExecutorThreadPoolExecutor区别

    之前工作中发现有同事在使用线程池的时候经常搞混淆ThreadPoolTaskExecutorThreadPoolExecutor,座椅在这里想写一片博客来讲讲这两个线程池的区别以及使用 ThreadPoolExecutor...,队列中保存着所有等待状态的线程。...());//配置拒绝策略 return executor; } 上面注解中已经注释了参数的详解,这里重点讲解一下spring线程池的拒绝策略处理流程。...2.查看任务队列是否已满,不满就将任务存储在任务队列中,否则执行第三步。 3.查看线程池是否已满,即就是是否达到最大线程池数,不满就创建一条线程执行任务,否则就按照策略处理无法执行的任务。...流程图如下 总结:本篇文章主要讲了一下JDK线程池spring线程池这两个线程池,具体实际业务则和平时使用一样。下一篇文章将讲一下如何使用spring的异步多线程调用注解@Async使用。

    1.1K20

    ThreadPoolExecutor系列一——ThreadPoolExecutor 机制

    7681529.html 解决问题: 1、 处理大量异步任务时能减少每个任务的资源开销; 2、 线程通过线程池管理,减少线程的资源开销; 3、 统计当前任务完成数量以及活跃线程数; 个人认为关键是线程池与任务队列如何完美协作...通过下图说明ThreadPoolExecutor机制 ?...,减慢任务入队列的时间, 从而达到线程处理任务的速度快于任务到达队列的速度; 优点:不抛出异常中断线程,不丢失任务;如下图 ?...c> ThreadPoolExecutor.DiscardPolicy: 直接扔掉任务 d> ThreadPoolExecutor.DiscardOldestPolicy: 按照进入顺序扔掉队列另一端最先进入的任务...,腾出空间,然后将新任务入队列; 不要让懒惰占据你的大脑,不要让妥协拖垮你的人生。

    53420

    python:ThreadPoolExecutor线程池ProcessPoolExecutor进程池

    标准库concurrent.futures模块 它提供了ThreadPoolExecutorProcessPoolExecutor两个类, 分别实现了对threading模块multiprocessing...简单代码演示 from concurrent.futures import ThreadPoolExecutor def get(run): print(" {}finished".format...(run)) # 创建线程池 # 设置线程池中最多能同时运行的线程数目,其他等待 executor = ThreadPoolExecutor(max_workers=2) # 通过submit函数提交执行的函数到线程池中...(2)线程池:异步 + 回调函数,IO密集型主要使用方式,线程池:执行操作为谁有空谁执行 from concurrent.futures import ThreadPoolExecutor def get...这个最好的方式 可以队列放在一起去执行。 总结 线程不是越多越好,会涉及cpu上下文的切换(会把上一次的记录保存)。

    40210

    ThreadPoolExecutor解读

    线程池状态 ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量 状态名 高 3 位 接收新任务 处理阻塞队列任务 说明 RUNNING 111...Y Y SHUTDOWN 000 Y Y 不会接收新任务,但会处理阻塞队列剩余任务 STOP 001 N N 会中断正在执行的任务,并抛弃阻塞队列任务 TIDYING 010 - - 任务全部执行完毕...如果队列选择了有界队列,那么任务超过了队列大小时,会创建 maximumPoolSize - corePoolSize 数目的线 程来救急。...的实现,它使用了一个拒绝策略链,会逐一尝试策略链中每种拒绝策略  当高峰过去后,超过corePoolSize 的救急线程如果一段时间没有任务做,需要结束节省资源,这个时间由keepAliveTime ...中特有的方法 Executors.newFixedThreadPool(1) 初始时为1,以后还可以修改 对外暴露的是 ThreadPoolExecutor 对象,可以强转后调用 setCorePoolSize

    14730

    ThreadPoolExecutor详解

    ThreadPoolExecutor详解 一. 概述 ThreadPoolExecutor是JDK提供的线程池的基类,其中定义了线程池的核心框架,并且允许客户端通过继承的方式实现自定义的线程池。...JDK提供默认的几种线程池都继承了ThreadPoolExecutor类,因此有必要对ThreadPoolExecutor进行详细的分析。 二....workQueue是JDK中BlockingQueue的实现类,可以使用ArrayBlockingQueue有界队列、LinkedBlockingQueue无界队列或其他类型的阻塞队列,这里不再展开。...源码分析 ThreadPoolExecutor有一个内部类Worker,它是对Runnable进行了封装,主要功能是对待执行的任务进行中断处理状态监控。...内部一个用来进行技术状态控制的控制变量,它使用了一个原子整形字段来实现两个方面的管理: 记录当前有效线程的数量; 记录当前线程池的状态,如允许、关闭等。

    64010

    并发编程之Executor,Executors,ExecutorServiceThreadPoolExecutor

    但是,对于初学者往往对Executor,Executors,ExecutorService,ThreadPoolExecutor傻傻分不清,小文特别梳理总结了,用于工作学习。...Executors及其ExecutorService: Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent包下,通过该框架来控制线程的启动、执行关闭...2、无界队列。...使用无界队列(典型的便是采用预定义容量的 LinkedBlockingQueue,理论上是该缓冲队列可以对无限多的任务排队)将导致在所有 corePoolSize 线程都工作的情况下将新任务加入到缓冲队列中...当使用有限的 maximumPoolSizes 时,有界队列(一般缓冲队列使用ArrayBlockingQueue,并制定队列的最大长度)有助于防止资源耗尽,但是可能较难调整控制,队列大小最大池大小需要相互折衷

    1.9K80

    ThreadPoolExecutor 使用示例

    我们上面讲解了 Executor框架以及 ThreadPoolExecutor 类,下面让我们实战一下,来通过写一个 ThreadPoolExecutor 的小 Demo 来回顾上面的内容。...构造函数自定义参数创建 ThreadPoolExecutor executor = new ThreadPoolExecutor( CORE_POOL_SIZE...workQueue:任务队列为 ArrayBlockingQueue,并且容量为 100; handler:饱和策略为 CallerRunsPolicy。...节中的 Demo 中我们使用 executor.execute(worker)来提交一个任务到线程池中去,这个方法非常重要,下面我们来看看它的源码: // 存放线程池的运行状态 (runState) 线程池内有效线程的数量...command)) { int recheck = ctl.get(); // 再次获取线程池状态,如果线程池状态不是 RUNNING 状态就需要从任务队列中移除任务

    6K20

    ThreadPoolExecutor的使用

    ThreadPoolExecutor也就是线程池。它就是Java为我们开发多线程程序时提供的一个开发框架。...线程池的创建:在创建ThreadPoolExecutor时,会需要传递几个必要的参数,下面我们详细看一下它们每个参数所代表的含义。...TimeUnit(线程活动保持时间的单位):可选的单位有天(DAYS)、小时(HOURS)、分钟(MINUTES)、毫秒(MILLISECONDS)、微秒(MICROSECONDS,千分之一毫秒)纳秒...下面我们用具体的代码来详细说明一下ThreadPoolExecutor的使用。 ? ?...按照上面的分析,因为我们创建ThreadPoolExecutor对象时初始化的空闲线程是2个,并且我们添加到线程池中的数量也是2个,所以当前任务是由核心线程池执行的任务并不会将任务添加到对列中。

    2.1K20
    领券