设计一个简单的线程池

本文探讨了设计一个简单线程池的基本要素,包括线程源、工作队列和线程集合。线程池作为存放线程的容器,需要确保线程操作的同步,同时线程作为“有编制”的正式员工,可以保存更多信息。文章提供了初步的线程池实现,仅关注接收任务并执行,不涉及任务取消和线程池销毁等复杂功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

基础

设计简述

一个设计方案一定是从最小的架子慢慢搭建起来的,那么想一下,最基础的线程池应该是什么样子的?
【1】需要有线程源。比较线程池说白了就是一个存放线程的容器,自身不生产线程。(当然了,如果暂时不接入线程工厂的话,循环new也是一种最基本的方案)
【2】需要有一个工作队列。我们的程序是一个进程,每个请求到达web容器,都会被创建一个线程(不一定,取决于web容器怎么配置的),那么同一时间可能有多个线程想要向工作队列提交任务,为了避免任务丢失,我们应该保证对队列的操作是同步的。另一方面,调度线程负责从这个队列中取出任务,然后委托一个线程去执行它。这个线程就是工作线程,当它执行完第一个被调度线程委托的任务后,它就会继续监听工作队列。
【3】线程集合。我们引入线程池的目的就是为了管理线程,线程不再是临时工,而是“有编制”的正式员工。而且此线程一般也不再是Thread,因为Thread对象对线程的描述是非常基本的,而我们先让这个线程能够保存更多信息就需要为它多穿几层衣服。

嗯,以上就是最必要的几个东西,至于各种coreSize、maxSize、线程池状态等,我们可以通过后期进行补充,而以上三样东西则是缺一不可。面试中,如果能把这三个核心的要素点出来基本就差不多了。

简单实现

提前说明:本实现中不考虑任务取消、线程池销毁等,仅仅为了构建出一个线程池的架子。

我们暂时不考虑核心与非核心线程,我们统一将线程池内部的工作线程设计为正式员工。

    class workThread extends Thread{
   
        private BlockingQueue<Runnable> workQueue;
        
        public workThread(BlockingQueue<Runnable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值