首页 > 其他分享 >什么是线程池?工作中线程池的应用

什么是线程池?工作中线程池的应用

时间:2023-10-24 18:04:36浏览次数:35  
标签:程池 非核心 synchronized 线程 中线 推送 数据

一、什么是线程池

简单理解,它就是一个管理线程的池子。

它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。

提高响应速度。 如果任务到达了,相对于从线程池拿线程,重新去创建一条线程执行,速度肯定慢很多。

重复利用。 线程用完,再放回池子,可以达到重复利用的效果,节省资源。

线程池的参数如下:

corePoolSize:线程核心参数选择了CPU数×2

maximumPoolSize:最大线程数选择了和核心线程数相同

keepAliveTime:非核心闲置线程存活时间直接置为0

unit:非核心线程保持存活的时间选择了 TimeUnit.SECONDS 秒

workQueue:线程池等待队列,使用 LinkedBlockingQueue阻塞队列

同时还用了synchronized 来加锁,保证数据不会被重复推送:

synchronized (PushProcessServiceImpl.1 class) {}

二、工作中线程池的应用

之前我们有一个和第三方对接的需求,需要向第三方推送数据,引入了多线程来提升数据推送的效率,其中用到了线程池来管理线程。

主要代码如下:

什么是线程池?工作中线程池的应用_推送

什么是线程池?工作中线程池的应用_数据_02

这个例子只是简单地进行了数据推送,实际上还可以结合其他的业务,像什么数据清洗啊、数据统计啊,都可以套用。

标签:程池,非核心,synchronized,线程,中线,推送,数据
From: https://blog.51cto.com/u_16269508/8008873

相关文章

  • 为什么单线程Redis能那么快
    单线程澄清Redis的单线程,指的是Redis的键值对读写由一个线程来完成。Redis的多线程:持久化异步删除集群数据同步网络IO(Redis6.0引入,5.0及之前都是单线程)......
  • 线程池
    codeimportosimporttimefromconcurrent.futures.threadimportThreadPoolExecutordeftest(n):print(f'n:{n}-os.getpid:{os.getpid()}')time.sleep(2)return'hello'#定义一个回调函数,异步提交完后,有结果自动调用该函数defcall_back(n):p......
  • 进程池
     codeimportosimporttimefromconcurrent.futures.processimportProcessPoolExecutordeftest(n):print(f'n:{n}-os.getpid:{os.getpid()}')time.sleep(2)return'helllo'defcall_back(n):print(f'callback:n.r......
  • 升讯威在线客服系统的并发高性能数据处理技术:为多线程处理同步数据
    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消......
  • 在C++中,互斥变量(std::mutex)是用于保护共享资源的重要工具,但它们确实有一些局限性,其中
    在C++中,互斥变量(std::mutex)是用于保护共享资源的重要工具,但它们确实有一些局限性,其中之一是无法保证包含指针的区域的多线程安全。这是因为互斥锁本质上只能保护它们所保护的代码块,而不会考虑指针指向的数据。下面是一些与互斥锁和指针相关的常见问题和注意事项:共享数据的复制:......
  • Chromium 消息循环和线程池详解
    Chromium中的多线程机制由base库提供,要理解Chromium中的多线程机制,首先要理解的概念就是 base::MessageLoop 和 base::TaskScheduler ,它们两个是Chromium多线程的基础1. MessageLoop详解base::MessageLoop 代表消息循环,它不会主动创建新的线程,默认情况下它使用当前......
  • Java使用多线程异步执行批量更新操作方法
    一、核心技术Java提供了Executor框架来实现多线程任务的执行。我们可以通过创建ExecutorService对象来管理线程池,然后将任务提交给这个线程池执行。Executor框架的优点在于,它可以自动管理线程数量,以最大化利用CPU和内存资源。二、具体实现方法1、创建一个数据更新任务类,实现Run......
  • 开源利器推荐:美团动态线程池框架的接入分享及效果展示
    一款美团动态线程池的框架DynamicTp终于开源了,接入简单,侵入性也不强,支持的接入方式也多,总体还是很不错的。我认为尤其适合中小企业SpringBoot应用接入,是一款线程池监控的利器。前言蛮早前有些过关于线程池的使用及参数的一些参考配置,有兴趣的可以翻看以前的博文,但终......
  • 杰哥教你面试之一百问系列:java多线程
    java多线程是java面试中的高频问题,如何才能在面试中脱颖而出呢?熟读这里的一百个java多线程面试问题即可。1.什么是线程?什么是进程?回答:线程是操作系统能够进行调度的最小执行单位,它包含在进程中,共享进程的资源。进程是一个正在执行中的程序,它包含了代码、数据和系统资源。一个进程......
  • 笔记:Qt开发之多线程同步互斥机制
    目标:了解Qt多线程开发中常用的同步互斥类,使用场景和特点 实现线程互斥和同步常用的类互斥锁:QMute、QMutexLocker条件变量:QWaitCondition信号量:QSemaphore读写锁:QReadLocker、QWriteLocker、QReadWriteLock 1,QMutex特点:QMutex是Qt框架提供的互斥锁类,用于保护共享资......