首页 > 其他分享 >线程池

线程池

时间:2024-06-15 17:10:07浏览次数:26  
标签:队列 创建 T3 corePoolSize 任务 线程

使用线程池带来的三个好处
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。线程池技术正是关注如何缩短或调整 T1,T3 时间的技术,从而提高服务器程序性能的。它把 T1,T3 分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有 T1,T3 的开销了。

第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。

线程池的创建各个参数含义

corePoolSize
线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于 corePoolSize;

maximumPoolSize
线程池中允许的最大线程数。如果当前阻塞队列满了,且继续提交任务,则创建新的线程执行任务,前提是当前线程数小于 maximumPoolSiz

keepAliveTime
线程空闲时的存活时间,即当线程没有任务执行时,继续存活的时间。默认情况下,该参数只在线程数大于 corePoolSize 时才有

workQueue
用于保存等待执行的任务的阻塞队列,一般来说,我们应该尽量使用有界队列,因为使用无界队列作为工作队列会对线程池带来如下影响。

threadFactory
创建线程的工厂,通过自定义的线程工厂可以给每个新建的线程设置一个具有识别度的线程名,当然还可以更加自由的对线程做更多的设置,比如设置所有的线程为守护线程。

Executors 静态工厂里默认的 threadFactory,线程的命名规则是“pool-数字-thread-数字”

RejectedExecutionHandler
线程池的饱和策略,当阻塞队列满了,且没有空闲的工作线程,如果继续提交任务,必须采取一种策略处理该任务,线程池提供了 4 种策略:
(1)AbortPolicy:直接抛出异常,默认策略;
(2)CallerRunsPolicy:用调用者所在的线程来执行任务;
(3)DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
(4)DiscardPolicy:直接丢弃任务;
当然也可以根据应用场景实现 RejectedExecutionHandler 接口,自定义饱和策略,如记录日志或持久化存储不能处理的任务。

线程池的工作机制
1)如果当前运行的线程少于 corePoolSize,则创建新线程来执行任务(注意,
执行这一步骤需要获取全局锁)。
2)如果运行的线程等于或多于 corePoolSize,则将任务加入 BlockingQueue。
3)如果无法将任务加入 BlockingQueue(队列已满),则创建新的线程来处
理任务。
4)如果创建新线程将使当前运行的线程超出 maximumPoolSize,任务将被
拒绝,并调用 RejectedExecutionHandler.rejectedExecution()方法

标签:队列,创建,T3,corePoolSize,任务,线程
From: https://www.cnblogs.com/velloLei/p/18249502

相关文章

  • 认识 Java 里的线程和方法
    Thread和Runnable的区别Thread才是Java里对线程的唯一抽象,Runnable只是对任务(业务逻辑)的抽象。Thread可以接受任意一个Runnable的实例并执行启动线程的方式有:1、XextendsThread;,然后X.start2、XimplementsRunnable;然后交给Thread运行永远都只有thread.star......
  • 什么是进程和线程
    什么是进程和线程进程是系统运行资源分配的最小单位进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘IO等,同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行......
  • CPU 核心数和线程数的关系
    CPU核心数和线程数的关系多核心:也指单芯片多处理器(ChipMultiprocessors,简称CMP),CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。这种依靠多个CPU同时并行地运行程序是实现超高速计算......
  • CPU、核心,进程、线程,串行、并发、并行之间的关系
    转发:https://blog.csdn.net/menglei16/article/details/1075945741、计算机硬件基本组成一个计算机(冯·诺依曼结构)【主要】硬件组成:主板:是“交通枢纽”,各个部件工作的所在平台,它负责将各个部件紧密连接在一起,各部件通过主板进行数据传输CPU:中央处理器(CentralProcessingUnit......
  • Java并发中线程池的面试题集
    写在开头之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下!Java并发编程之线程池十八问经过之前的学习,......
  • C++多线程:生产者消费者模式
    文章目录一、模式简介二、头文件、全局变量2.1仓库类的设计2.1.1关于仓库类的分析2.1.2仓库类的设计代码2.2工厂类的设计2.2.1关于工厂类的分析2.2.2工厂类的设计代码a将产品item放到仓库repob将产品item从仓库repo取出c生产者操作d消费者操作2.2.3主函数代......
  • C#等待多线程任务都执行结束
    有时为了快速处理多个任务,同时启用多个线程执行,需要等待都执行结束后再执行后面的方法,实现方法如下:点击查看代码usingSystem;usingSystem.Threading.Tasks;classProgram{staticasyncTaskMain(string[]args){vartask1=Task.Run(()=>DoWork......
  • JVM运行时数据区(线程相关)
    一、JVM运行时数据区JVM运行时数据区是一个抽象概念,主要依赖于寄存器、高速缓存、主内存几个部分组成。计算机运行=指令+数据,指令用于执行方法,数据用于指向存放的数据和对象。虚拟机栈---用于执行java方法本地方法栈---执行本地方法(通常时c语言实现的)程序计数......
  • 利用信号量实现线程顺序执行
    线程顺序循环执行的场景在多线程编程中并不罕见,尤其是在需要协调多个线程按特定顺序重复执行任务的情况下。以下是几个常见的例子:生产者-消费者模型:在这种模型中,生产者线程生成数据并将其放入缓冲区,而消费者线程从缓冲区取出数据进行处理。这种情况下,生产者和消费者线程通常按顺......
  • java多线程学习笔记——“并发提高效率”
    java的内存分配与管理如果要学习多线程,我们必须先对java的内存分配和管理有一定的了解java的分区包括:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、运行时常量池这几个部分。栈区栈区有以下几个特点:1、线程私有,每个线程都会拥有自己的栈2、每个方法在被调用......