首页 > 编程语言 >JAVA----线程池

JAVA----线程池

时间:2023-07-16 09:33:49浏览次数:38  
标签:JAVA 队列 创建 ---- 单线程 任务 线程 执行

线程池

  1. 线程的状态:1新建状态(没启动) 2 可运行状态(可能在运行,也可能等待cpu时间片) 3 阻塞(等待获取排他锁,或者等待其他线程唤醒,不醒无法获取时间片)4 限期等待(一段时间后被系统自动唤醒) 5 死亡:可能任务执行结束或产生异常结束。
  2. 线程池的状态:

    RUNNING:运行状态,可以接受新任务。

    SHUTDOWN不接受新任务,但是能处理已添加的任务。

    STOP:不接受新任务,不处理已添加的任务。

    TIDYING:所有的任务已终止;当线程池STOP状态,线程池执行的任务为空时,就会由STOP变成TIDYING。

    TERMINATED:线程池彻底终止。

  1. 线程池的工作原理:首先创建线程池,通过execute()方法添加任务,判断正在运行的线程数量小于核心线程数量,马上创建线程去执行;如果正在运行得线程数量等于或者大于核心线程数量,就将这个任务加入队列;如果队列满了,正在运行得线程数量小于最大线程数,那么会创建非核心线程去执行这个任务;如果队列满了,正在运行得线程数量等于或大于最大线程数量,那么线程池就会报异常。也可以设置拒绝策略。
  2. 线程池参数:1核心线程数 2 最大线程数 3非核心线程存活的时间 4 存活时间得单位 5 缓冲队列 6 线程工厂 7拒绝策略。
  3. 拒绝策略:1丢弃任务抛出异常。2 线程池没有关闭,让提交任务的当前线程处理。3 直接自己丢弃这个任务,不触发任何动作 4:丢弃队列最前的任务,重新提交被拒绝的任务。
  4. 线程池的队列:1 ArrayBlockingQueue:数组阻塞队列。2 LinkBlockingQueue:链表阻塞队列。3 DelayQueue:延时队列。
  5. 线程池的类型:1 可缓存的线程池,灵活回收空闲线程。2 定时线程池,控制线程最大并发数。3延时线程池:支持可定期或延时执行任务。 4单线程化线程池:它会用唯一的工作线程来执行任务。
  6. 创建线程池的几种方式:通过Excutors创建:1.一个固定大小的线程池,可以控制并发线程。2创建一个可缓存的线程池,如果线程超过需要的线程缓存一段时间后会进行线程的回收。3创建单个线程数的线程池,可以保证先进先出的执行顺序。4创建一个可以执行延迟任务的线程池。5创建一个单线程的可以执行延迟任务的线程池。6创建一个抢占式执行的线程池(任务执行顺序不确定)。

  9.通过ThreadPoolExecutor创建:使用7个参数创建线程池。

  单线程池的意义:虽然是单线程池,提供了工作队列,生命管理周期,工作线程维护等功能。

标签:JAVA,队列,创建,----,单线程,任务,线程,执行
From: https://www.cnblogs.com/ybex/p/17557446.html

相关文章

  • SecureCRT 9.4发布啦!看看有哪些新功能吧!
    导读SecureCRT非常适合安全连接到运行Windows、UNIX和VMS的远程系统。SecureCRT支持通过Xmodem、Zmodem、Ymodem、Kermit和SFTP进行安全文件传输。背景SecureCRT是一款高度可定制的终端仿真器,支持Secure Shell (SSH)以及Telnet、Telnet/TLS和串行协议......
  • JAVA面试题----MYSQL
     MYSQL。          mysql使用的引擎是InnoDB,它有四大特性:1插入缓冲2二次写3自适应hash索引(ahi),就不用走B+树了;4预读。使用InnoDB因为它是事务安全的存储引擎,它具备提交,回滚以及崩溃恢复的功能以及保护用户数据。MYSQL的索引分类:1主键索引2,唯一索引3.复合索......
  • 《架构整洁之道》学习笔记 Part 2 编程范式
    计算机编程发展至今,一共只有三个编程范式:结构化编程面向对象编程函数式编程编程范式和软件架构的关系结构化编程是各个模块的算法实现基础多态(面向对象编程)是跨越架构边界的手段函数式编程是规范和限制数据存放位置与访问权限的手段软件架构的三大关注重点:功能性、组......
  • 李书福-未来世界发展的六个洞见
    洞见一:人类和平与世界稳定面临巨大挑战。世界好像一座斜拉桥,各种力量相互作用、相互牵制、相互推拉、相互对立、相互组合,形成了矛盾的整体。大家都在相互寻找战略平衡,共同维护彼此关切,尽力保证世界和平稳定。这种矛盾的平衡构成了人类社会走向更加美好明天的基础,我称之为“斜拉......
  • 装饰器
    闭包函数1.闭:定义在函数内部的函数2.包:内部函数使用了外层函数名称中的名字defouter():#外部函数x=999definner():#内部函数:使用的是外层函数的返回值print('fromouter>>>inner',x)returninner(外层函数的返回值)x=666res=outer()#......
  • 【学习笔记】山东省队第三轮集训
    Day2A.sequence题目描述:题目分析:考虑一个很简单的\(dp\)就是设\(f[i]\)表示考虑了前\(i\)个位置最多可以划分为多少个序列。转移就是可以直接从\(f[i-1]\)继承,或者从\(j\)满足\(\sum_{k=j+1}^{i}c_i=0\),也就是前缀和相等。可以发现的是对于从\(j\)转移这种......
  • 7.9-7.15博客
    本周(7.9-7.15)主要返家并在家进行休息。下周准备开始学习大数据的相关知识。虽然我觉得下周的计划可能完不成,但是计划总是要有的。周日,室友陆续回家,看了一下整个学期的学习总结。写了博客。周一,在宿舍玩了一天。周二,11号准备回家。周三,报考了驾考,再不考好像没时间了。周四,进行......
  • Nginx arm编译安装
    Nginxarm编译安装背景计划编译一套产品.能够比较方便快捷的进行nginx的交付.主要思想是源码编译不仅能够在arm上面运行也可以在x86上面编译考虑性能还有一些扩展性.高效处理.主要涉及的点有:openssl最新的1.1.1的的版本zlib进行压缩,解压缩的处理.pcre正......
  • css3动画之打字效果
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>速度曲线步长</title>......
  • PostgreSQL 多表连接
    在关系型数据库中,通常将不同的实体和它们之间的联系存储到多个表中。比如员工的个人信息存储在employees表中,而与部门相关的信息存储在departments表中,同时employees表中存在一个外键字段(department_id),引用了departments表的主键(department_id)。当我们想要查看员工的信息时,通常只......