首页 > 其他分享 >线程池

线程池

时间:2023-07-25 17:05:07浏览次数:25  
标签:int 队列 任务 线程 内存 执行

线程池的组成

1、线程管理器(ThreadPool)

2、工作线程(PoolWorker)

3、任务接口(Task)

4、任务队列(taskQueue)

初始化参数

corePoolSize:核心线程数

maxmumPoolSize:最大线程数

keepAliveTime和TimeUnit:空闲线程存活时间及单位

workQueue:工作队列,必须是BlockingQueue

常见线程池

newCachedThreadPool():可缓存线程池,当线程池大小超过了处理任务所需的线程,就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。

newFixedThreadPool(int nThread):固定数量的线程池,每提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行。

newSingleThreadExecutor():单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务。

newScheduledThreadPool(int corePoolSize):大小无限制的线程池,支持定时和周期性的执行线程

newWorkStealingPool(int parallelism):任务窃取线程池,用的是ForkJoinPool。

线程池的使用场景

1、减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。

2、可以根据系统的承受能力,调用线程池中的工作线程的数目,防止因为消耗过多的内存,而把服务器整挂机(每个线程需要大约1M内存,线程越多,消耗的内存也就越大,最后死机)。

3、将任务的提交和执行进行解耦合,开发的时候不需要考虑太多线程的代码,只关心业务逻辑。

标签:int,队列,任务,线程,内存,执行
From: https://blog.51cto.com/u_11315052/6846924

相关文章

  • java多线程内存图
    多线程的例子例一:publicclassTest{publicstaticvoidmain(String[]args)throwsException{Threadx1=newThread(){@Overridepublicvoidrun(){for(inti=0;i<100;i++){Syst......
  • 线程
     publicstaticvoidCallToChildThread(){try{Console.WriteLine("执行子程序");intsleepfor=5000;Thread.Sleep(sleepfor);Console.WriteLine($"暂停{sleepf......
  • 多线程并发修改集合案例
    //单线程使用修改集合ArrayListarrayList=newArrayList();for(inti=0;i<100;i++){arrayList.add(i);}intbatch=10;intsize=arrayList.size();if(0<size&&size&l......
  • 多线程
    1.Python通过两个标准库thread和threading提供对线程的支持。thread提供了低级别的、原始的线程以及一个简单的锁.Threading模块封装了一些常用的方法,初学者直接学这个模块就行了。2.Python中使用线程有两种方式:函数或者用类来包装线程对象3.threading.Thread里面几个参数介绍:c......
  • 线程安全的数组java
    实现线程安全的数组(Java)概述在Java开发中,线程安全是一个非常重要的概念。当多个线程同时访问和修改共享资源时,如果不采取相应的措施,就可能导致数据不一致或者出现其他的并发问题。本文将介绍如何实现一个线程安全的数组,以保证在多线程环境下对数组的访问和修改是安全的。实现步......
  • .net 跨线程
    .NET跨线程实现流程步骤步骤描述1确定要在不同线程之间进行通信的对象2创建一个委托以定义将在目标线程上执行的方法3创建一个需要跨线程调用的方法4使用控件的Invoke或BeginInvoke方法来调用跨线程方法代码示例步骤1:确定要在不同线程之间进行通......
  • 为什么多线程下会有线程安全问题
    原子性:加锁(乐观锁CAS、悲观锁)原子性是指一个操作或一系列操作要么全部执行成功并且不被中断,要么完全不执行,没有中间状态。在多线程或并发环境下,如果一个操作是原子性的,那么其他线程不会在该操作执行过程中看到该操作的部分结果。原子性是为了保证操作的一致性和正确性。例如,一个......
  • 基于C++11特性的线程池
    写在前面:本文学习自基于C++11实现线程池,代码部分均属于该博主,自己只是想记录以下自己的认知,并以这种方式加深一下自己对于多线程的理解1前置知识左值和右值左值(Lvalue):左值是指具有持久性和地址的表达式。简单来说,左值是可以被引用的、可以取地址的表达式。左值可以是变量、对......
  • 设备驱动-10.中断子系统-4.2中断线程化处理-workqueue
    1工作队列workqueue引入定时器、tasklet,它们都是在中断上下文中执行,它们无法休眠。那么如果一旦中断要处理耗时复杂的操作,就会显得很卡。那么使用内核线程来处理这些耗时的工作,那就可以解决系统卡顿的问题。Linux内核中工作队列workqueue就是线程化处理的一种方式,“工作队列”(......
  • Java多线程详解——一篇文章搞懂Java多线程
    Java多线程详解——一篇文章搞懂Java多线程目录1.基本概念2.线程的创建和启动2.1.多线程实现的原理2.2.多线程的创建,方式一:继承于Thread类2.3.多线程的创建,方式一:创建Thread匿名子类(也属于方法一)2.4.多线程的创建,方式二:实现Runnable接口2.4.1.比较创建线程的两种......