java多线程之线程池

青旅半醒 2023-02-20 06:37 122阅读 0赞

java多线程之线程池

池化技术
程序的运行,其本质上,是对系统资源(CPU、内存、磁盘、网络等等)的使用。如何高效的使用这些资源是我们编程优化演进的一个方向。今天说的线程池就是一种对CPU利用的优化手段。
通过学习线程池原理,明白所有池化技术的基本设计思路。遇到其他相似问题可以解决。
1 池化技术
前面提到一个名词——池化技术,那么到底什么是池化技术呢 ?
池化技术简单点来说,就是提前保存大量的资源,以备不时之需。在机器资源有限的情况下,使用池化技术可以大大的提高资源的利用率,提升性能等。在编程领域,比较典型的池化技术有:
线程池、连接池、内存池、对象池等。
主要来介绍一下其中比较简单的线程池的实现原理,希望读者们可以举一反三,通过对线程池的理解,学习并掌握所有编程中池化技术的底层原理。
我们通过创建一个线程对象,并且实现Runnable接口就可以实现一个简单的线程。可以利用上多核CPU。当一个任务结束,当前线程就接收。但很多时候,我们不止会执行一个任务。如果每次都是如此的创建线程->执行任务->销毁线程,会造成很大的性能开销。那能否一个线程创建后,执行完一个任务后,又去执行另一个任务,而不是销毁。这就是线程池。这也就是池化技术的思想,通过预先创建好多个线程,放在池中,这样可以在需要使用线程的时候直接获取,避免多次重复创建、销毁带来的开销。

线程池的优势:
线程池做的工作主要是:控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。
它的主要特点为:线程复用,控制最大并发数,管理线程。
第一:降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
第二:提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。
第三:提高线程的可管理性,线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配,调优和监控。

上个代码看下

  1. public class AThread {
  2. public static void main(String[] args) {
  3. ExecutorService pool = Executors.newFixedThreadPool(10);
  4. for (int i = 0; i < 10 ; i++) {
  5. pool.execute(new Runnable() {
  6. @Override
  7. public void run() {
  8. System.out.println(Thread.currentThread().getName() + "号线程--->run");
  9. }
  10. });
  11. }
  12. }
  13. }

输出:

  1. pool-1-thread-1号线程--->run
  2. pool-1-thread-9号线程--->run
  3. pool-1-thread-7号线程--->run
  4. pool-1-thread-8号线程--->run
  5. pool-1-thread-2号线程--->run
  6. pool-1-thread-6号线程--->run
  7. pool-1-thread-5号线程--->run
  8. pool-1-thread-10号线程--->run
  9. pool-1-thread-3号线程--->run
  10. pool-1-thread-4号线程--->run

大家应该看出来了,其实线程池就是提前创建一定数量的线程,当我们使用的时候可以直接取出来,而不需要我们再次的创建了,当我们使用完之后,可以再放回到线程池,方便下次使用的时候直接调用即可,这样节省了我们创建线程的时间,而且也避免了我们频繁创建线程而消耗极大的内存
大家发现了我们输出的问题了,今天先留个空,下次再说
喜欢的小伙伴可以关注微信公众号哦,每天都有干货
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,122人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java线线

    java多线程之线程池 池化技术 程序的运行,其本质上,是对系统资源(CPU、内存、磁盘、网络等等)的使用。如何高效的使用这些资源是我们编程优化演进的一个方向。今天说

    相关 java线-线

    线程池-基本原理 概述 : ​ 提到池,大家应该能想到的就是水池。水池就是一个容器,在该容器中存储了很多的水。那么什么是线程池呢?线程池也是可以看做成一个池子,在该池子

    相关 java线线(ExecutorService)

           创建新线程的服务器在创建和销毁线程上花费的时间和消耗的系统资源要比花在处理实际的用户请求的时间和资源更多,线程池为线程生命周期开销问题和资源不足问题提供了解决方案

    相关 线线

    前言: 1. 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,