一、为什么要实现线程池?

线程的创建与销毁对于CPU而言开销较大,通过池化技术可避免重复的创建与销毁线程。

方便与线程资源统一管理。

二、几种常见的线程池以及核心参数

不推荐使用Executor创建线程池,线程池维护的队列未指定长度,有内存溢出的风险存在。

一、 线程的核心参数

public ThreadPoolExecutor(

int corePoolSize,

int maximumPoolSize,

long keepAliveTime,

TimeUnit unit,

BlockingQueue workQueue,

ThreadFactory threadFactory,

RejectedExecutionHandler handler)

corePoolSize:核心线程数

maximumPoolSize: 最大线程数

keepAliveTime:非核心线程数空闲时间

unit:时间单位

workQueue:存放任务的阻塞队列

threadFactory:使用线程工厂创建线程

handler:线程的拒绝策略

二、几种常用的线程池

创建固定大小的线程池

new ThreadPoolExecutor(

nThreads,

nThreads,

0L, TimeUnit.MILLISECONDS,

new LinkedBlockingQueue(),

threadFactory)

创建单线程的线程池

new ThreadPoolExecutor(

1,

1,

0L, TimeUnit.MILLISECONDS,

new LinkedBlockingQueue()));

创建缓存线程池

new ThreadPoolExecutor(

0,

Integer.MAX_VALUE,

60L, TimeUnit.SECONDS,

new SynchronousQueue());

三、线程的生命周期状态

生命周期状态

Running:可接受新的任务,并可处理队列中的任务。

ShoutDown:不接受新的任务,任然会处理处于队列中的任务。

Stop:不接受新的任务也不会处理队列中的任务,但是不会终止正在执行的任务。

Tidying:不接受新的任务也不处理队列中的任务并且会立即终止正在执行的任务。

Terminated:终止状态。

流转图

四、线程池的执行流程

执行executor后,任务首先交由核心线程数处理。

核心线程数都为非空闲状态,则将任务放入阻塞队列。

阻塞队列满了以后,若核心线程数任然为非空闲状态,则创建非核心线程从队列取任务执行。

当核心线程数与非核心线程都处于工作状态中,则执行拒绝策略。

文章来源: segmentfault.com,作者:每天进步一点点,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000037683565

java线程池的概念_Java线程池的基本概念以及生命周期相关推荐

  1. java线程池概念_Java 线程池概念、原理、简单实现

    线程池的思想概述 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结東了,这样频繁创建线程就会大大降低系 ...

  2. java set和get原理_Java线程池的实现原理和使用

    为什么用线程池 在我们进行开发的时候,为了充分利用系统资源,我们通常会进行多线程开发,实现起来非常简单,需要使用线程的时候就去创建一个线程(继承Thread类.实现Runnable接口.使用Calla ...

  3. java 线程池 源码_java线程池源码分析

    我们在关闭线程池的时候会使用shutdown()和shutdownNow(),那么问题来了: 这两个方法又什么区别呢? 他们背后的原理是什么呢? 线程池中线程超过了coresize后会怎么操作呢? 为 ...

  4. java 线程池的理解_JAVA线程池原理的理解

    线程池原理基础理解: 线程池初始化规定个数的线程,然后这些线程一直运行,并且监控线程队列,只要线程队列被添加进线程,那么线程池不断从队列中取出线程运行.直到队列中的线程为空.实例代码如下: packa ...

  5. java线程池 的方法_JAVA线程池的实现方法

    我们大家都知道,在处理多线程服务并发时,由于创建线程需要占用很多的系统资源,所以为了避免这些不必要的损耗,通常我们采用线程池来解决这些问题. 线程池的基本原理是,首先创建并保持一定数量的线程,当需要使 ...

  6. java线程池的应用_Java线程池的使用

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...

  7. java线程池多线程优先级_Java线程优先级

    java线程池多线程优先级 Priority of a thread describes how early it gets execution and selected by the thread ...

  8. java线程池存在时间_Java线程池基础

    目录: 一.线程池概述 1.线程池类 目前线程池类一般有两个,一个来自于Spring,一个来自于JDK: 来自Spring的线程池:org.springframework.scheduling.con ...

  9. java 线程池 资源回收_JAVA线程池资源回收的问题

    最近项目中为了提高用户体验度,前台创建任务后台任务,用多线程来跑. 现在的场景:后台定时任务管理这两个线程池,一个最大线程数10个,一个最大线程数15.应用部署之后,不超过5个小时,服务器负载高,内存 ...

最新文章

  1. deepin下载软件慢切换镜像
  2. Windows系统盘符错乱导致桌面无法加载。
  3. linux下 面向对象语言,人工智能(AI)程序设计(面向对象语言)PDF+PPT与习题等...
  4. 2021年高考英语卷三成绩查询,2021年全国3卷高考外语卷难不难,今年全国3卷高考外语卷难度系数点评...
  5. mybatis当遇到,用mysql关键字作为的字段的表,如何处理
  6. 这样安装python库才是最正确的哦_这样安装 Python 库才是最正确的哦~
  7. 使用 .NET Core 中的 EventCounters 衡量性能
  8. java基础day11---空指针异常----引用类型--自定义类型赋值--封装
  9. 【51nod - 前缀异或】 对前缀和的理解
  10. hpux系统启动中被某个服务hang住的解决办法
  11. PS2022新增功能简介
  12. 古体字与简体字对照表_简体字繁体字对照表
  13. 计算机与机械制图课题研究,计算机辅助技术和机械制图融合教学改革探索和实践.doc...
  14. 永中文档在线预览集群部署方案
  15. Flutter时间日期格式化等操作(一个月的最后一天日期,时间段内所有日期...)
  16. 这台计算机没有连接到网络怎么办,通过路由器连接电脑连不上网怎么办_台式连接路由器没有网解决方法-系统城...
  17. EXCEL VBA 之录制宏
  18. 咖啡屋时光书城【原创】
  19. 常见物联网近距离无线通信技术解析
  20. GREE通过改由Rimini Street为其SAP应用提供支持服务来加快推进以业务为驱动力的IT发展路线图

热门文章

  1. Go的变量到底在堆还是栈中分配
  2. java实验的技术问题及解决方法,2018-2019-2 20175313 实验一《Java开发环境的熟悉》实验报告...
  3. 【PHPExcel】设置打印格式
  4. python 文件更新_使用Python批量更新服务器文件【新手必学】
  5. java int类源码,一起学JDK源码 -- Integer类
  6. android运动轨迹rungps_android运动轨迹rungps_Android使用百度地图API实现GPS步行轨迹...
  7. java什么时候用有参_Java有陷阱——慎用入参做返回值
  8. js编码java解码_js编码处理(转)
  9. python递归_纯Python递归计算行列式
  10. php 如何发送json数据格式,Php如何使用curl发送json格式数据实例