首页 > 其他分享 >初识线程池

初识线程池

时间:2024-11-04 18:49:16浏览次数:3  
标签:Executors 队列 创建 任务 初识 线程 空闲

一、什么是线程池?

线程池就是管理一系列线程的资源池。当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。

二、线程池的作用

池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。

线程池提供了一种限制和管理资源(包括执行一个任务)的方式。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。

作用:

  • 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
  • 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

三、线程池的创建方式

方式一:通过ThreadPoolExecutor构造函数来创建(推荐)。

 方式二:通过 Executor 框架的工具类 Executors 来创建。

Executors工具类提供的创建线程池的方法如下图所示:

可以看出,通过Executors工具类可以创建多种类型的线程池,包括:

  • newFixedThreadPool固定线程数量的线程池。该线程池中的线程数量始终不变。当有一个新的任务提交时,线程池中若有空闲线程,则立即执行。若没有,则新的任务会被暂存在一个任务队列中,待有线程空闲时,便处理在任务队列中的任务。
  • newSingleThreadExecutor:单线程化的线程池。若多余一个任务被提交到该线程池,任务会被保存在一个任务队列中,待线程空闲,按先入先出的顺序执行队列中的任务。
  • newCachedThreadPool 可调整线程数量的线程池。线程池的线程数量不确定,但若有空闲线程可以复用,则会优先使用可复用的线程。若所有线程均在工作,又有新的任务提交,则会创建新的线程处理任务。所有线程在当前任务执行完毕后,将返回线程池进行复用。
  • newScheduledThreadPool固定线程数量的线程池。支持定时及周期性任务执行任务。

 

标签:Executors,队列,创建,任务,初识,线程,空闲
From: https://blog.csdn.net/2301_79814793/article/details/143445849

相关文章

  • 操作系统线程的组织与调度(schedule)
    一、线程调度schedule在操作系统中,调度器(Scheduler)的主要任务是管理CPU的时间分配给各个进程和线程,以优化特定的性能指标,如响应时间、吞吐量和CPU利用率。调度器通常分为三类:长期调度器、中期调度器和短期调度器,但在现代操作系统中,最常讨论的是短期调度器,即CPU调度器。下面是......
  • 深入理解 `std::shared_ptr`:原理、用法及其线程安全性
    在C++中,智能指针是现代内存管理的重要工具,尤其是在复杂的多线程环境中,能显著减少内存泄漏和悬空指针等问题。std::shared_ptr是C++11引入的一种共享智能指针,通过引用计数机制管理对象的生命周期。本文将详细介绍std::shared_ptr的基本用法、循环引用问题、线程安全性及其局......
  • Python中的生产者-消费者模型:多进程与多线程的实践
    Python中的生产者-消费者模型:多进程与多线程的实践在现代编程中,生产者-消费者模型是一种常见的设计模式,用于处理任务队列和并发执行。Python提供了多种工具来实现这一模型,包括threading模块和multiprocessing模块。本文将通过一个实际的案例——从网页上批量下载图片——来......
  • Jenkins/Java 线程泄露排查(二)
    ......
  • 【Python】全面解析Python中的GIL(全局解释器锁):多线程与多进程的实战与抉择
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界Python中的GIL(全局解释器锁)对多线程并发执行的限制性影响是开发者在性能优化时需要特别关注的内容。本文将详细讨论GIL的工作机制及其对多线程性能的影响,深入分析Python多线程在CPU密集型和I/O密集型任......
  • Java 虚拟线程:高并发编程的新纪元(Java 21)
    Java虚拟线程:高并发编程的新纪元前言在现代软件开发中,高并发编程一直是一个具有挑战性的问题。传统的线程模型虽然强大,但在高并发场景下会引发性能瓶颈和资源耗尽等问题。为了应对这些挑战,Java引入了虚拟线程(VirtualThreads),它为高并发编程带来了全新的解决方案。虚拟......