右侧
当前位置:网站首页 > 资讯 > 正文

threadpoolexecutor线程池使用,threadlocal线程池

作者:admin 发布时间:2024-01-16 08:15 分类:资讯 浏览:51 评论:0


导读:Android线程池ThreadPoolExecutor详解当核心线程与任务队列已满时线程池会创建新线程处理任务。当线程数达到maxPoolSize后会拒绝线程抛出异常。Thre...

Android线程池ThreadPoolExecutor详解

当核心线程与任务队列已满时线程池会创建新线程处理任务。当线程数达到maxPoolSize后会拒绝线程抛出异常。

ThreadPoolExecutor 线程池的状态有以下五种: - RUNNING:允许提交并处理任务。- SHUTDOWN:不允许提交新的任务,但是会处理完已提交的任务。

ThreadPoolExecutor 的工作原理是,当有任务到来时,它会根据线程池的大小和任务的类型来决定是否创建新的线程来执行任务。如果线程池中没有可用的线程,则会创建新的线程。如果线程池已满,则会将任务放入队列中等待执行。

在Android中线程池就是ThreadPoolExecutor对象。我们先来看一下ThreadPoolExecutor的构造函数。

Android线程池的使用

第六个参数threadFactory为 线程工厂 ,当线程池需要创建一个新线程时,使用线程工厂来给线程池提供一个线程。

http用gzip压缩,设置连接超时时间和响应超时时间 http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的浏览部分数据,实现离线阅读。

提高对线程的管理度; 线程池的使用也比较简单,流程如下: 接下来通过源码来介绍一下ThreadPoolExecutor内部实现及工作原理。

线程工厂,为线程池提供创建新线程的功能。举个例子,我们常用的okhttp内部也是使用了线程池,它的ThreadPoolExecutor主要是定义在Dispatcher类里面。 使用的是CachedThreadPool。

合理使用线程池以及线程变量

线程池中通过 ctl 字段来表示线程池中的当前状态,主池控制状态 ctl 是 AtomicInteger 类型,包装了两个概念字段:workerCount 和 runState,workerCount 表示有效线程数,runState 表示是否正在运行、正在关闭等状态。

maxPoolSize:最大线程数 当核心线程与任务队列已满时线程池会创建新线程处理任务。当线程数达到maxPoolSize后会拒绝线程抛出异常。

所以产生线程总数不会超过线程池中线程的数目,而如果服务器不利用线程池来处理这些请求则线程总数为50000。一般线程池大小是远小于50000。所以利用线程池的服务器程序不会为了创建50000而在处理请求时浪费时间,从而提高效率。

所以,对于任务数量不端增加的程序,固定线程数量的线程池是必要的。

第六个参数threadFactory为 线程工厂 ,当线程池需要创建一个新线程时,使用线程工厂来给线程池提供一个线程。

线程池使用及优势

线程池的优点 线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。

maximumPoolSize (最大线程数大小):线程池允许创建的最大线程数,当队列已满,并且线程池中的线程数小于最大线程数,则线程池会创建新的线程执行任务。当使用无界队列时,此参数无用。

线程池是一种“池化”的线程使用模式,通过创建一定数量的线程,让这些线程处于就绪状态来提高系统响应速度,在线程使用完成后归还到线程池来达到重复利用的目标,从而降低系统资源的消耗。

线程池之ThreadPoolExecutor使用

执行器(Executor)类有许多静态工厂方法用来构建线程池。 上面3个方法返回实现了ExecutorService接口 的 ThreadPoolExecutor类的对象 。

ThreadPoolExecutor threadPoolExecutor2 = (ThreadPoolExecutor) singleExecutorService;} 对比可以看出,FixedThreadPool可以向下转型为ThreadPoolExecutor,并对其线程池进行配置,而SingleThreadExecutor被包装后,无法成功向下转型。

线程池,thread pool,是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。功能:应用程序可以有多个线程,这些线程在休眠状态中需要耗费大量时间来等待事件发生。

对比可以看出,FixedThreadPool可以向下转型为ThreadPoolExecutor,并对其线程池进行配置,而SingleThreadExecutor被包装后,无法成功向下转型。 因此,SingleThreadExecutor被定以后,无法修改,做到了真正的Single。

ThreadPoolExecutor 是线程池的核心实现类,用来执行被提交的任务 corePoolSize 核心线程数 maximumPoolSize 最大线程数 线程池中允许的最大线程数。

AbortPolicy 为Java线程池默认的阻塞策略,不执行此任务,而且直接抛出一个运行时异常,切记ThreadPoolExecutor.execute需要try catch,否则程序会直接退出。

标签:


取消回复欢迎 发表评论: