并发编程系列(1)- 线程池原理

本文深入探讨了线程池的基本原理,包括其核心线程池、工作队列和线程池执行流程。通过分析ThreadPoolExecutor源码,揭示了线程池如何处理任务和管理线程。此外,还介绍了线程池的使用方法,如创建线程池、提交任务、关闭线程池以及如何合理配置线程池以确保系统稳定性和响应时间。最后,文章展示了如何手工实现一个简单的线程池,强调了线程池通过工作队列连接客户端和工作者线程的重要性。
摘要由CSDN通过智能技术生成

一、线程池基本原理分析

1、什么是线程池

线程池就是一种池化技术,核心思想就是事先创建多个线程,将线程资源放到池子中,这样任务到达时可以 不需要等到线程创建就能立刻去执行。
创建线程池的好处:

  • 降低资源消耗。线程池可避免大量线程的创建于销毁造成的消耗。
  • 提高响应速度。任务到达时,线程池中线程可立即去执行,无需等待线程的创建。
  • 提高线程的可管理性。利用线程池可以进行统一分配、调优和监控。
2、线程池原理

当向线程池提交一个任务的时候,工作原理如下:
(1)首先判断核心线程池中(corePool)线程是否都在执行任务。如果不是,则在核心线程池中创建一个线程来执行任务。如果核心线程池的线程都在执行任务,则进入第2步;
(2)判断工作队列(BlockingQueue)是否已经满。如果工作队列没有满,则将新提交的任务存储在工作队列中(此时核心线程池中的某个线程执行完任务后,就会执行工作队列中存储的任务)。如果工作队列已经满了,则进入第3步;
(3)判断线程池(maximumPool)所有线程是否都处在工作状态,如果不是,则创建一个线程来执行任务(注:非核心线程池中的线程);如果是,则交给饱和策略来处理这个任务。

线程池工作原理示意图如下图所示:
在这里插入图片描述

3、线程池ThreadPoolExecutor源码分析

线程池的核心实现类是ThreadPoolExecutor,所以首先看看ThreadPoolExecutor中最重要的方法:execute()。
注:下面源码来自JDK 1.8.

public void execute(Runnable command) {
   
        if (command == null)
            throw new NullPointerException();
    
        int c = ctl.get();
        // 1、如果当前线程数小于核心线程数,就在核心线程池中创建线程执行任务
        if (workerCountOf(c) < corePoolSize) {
   
            //true-代表在corePool中创建线程,添加成功返回
            if (addWorker(command, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值