线程池的理解和使用(附代码说明)

线程池通过减少线程创建销毁开销、提高响应速度及管理线程,优化多线程应用。核心概念包括核心线程数、最大线程数、存活时间和阻塞队列。ThreadPoolExecutor是其父类,提供了FixedThreadPool、SingleThreadExecutor、CachedThreadPool和ScheduledThreadPoolExecutor等常见实现。线程池的工作机制包括任务提交、关闭和饱和策略。ScheduledThreadPoolExecutor适合周期任务,而WorkStealingPool适合并行处理耗时任务。
摘要由CSDN通过智能技术生成

为什么要用线程池?

1、降低资源的消耗。降低线程创建和销毁的资源消耗;
2、提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间
3、提高线程的可管理性。

线程池模型

在这里插入图片描述
我们不妨动手写一个线程池,主要有以下几个核心概念,阻塞队列中待执行的任务,线程正在执行的任务,线程数。

package com.xiangxue.ch6.mypool;

import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

/**
 * 测试写一个线程池
 */
public class LeeThreadPoll {
   


    private static int WORK_NUM = 5;//池子中可以执行的线程个数,初始参数
    private static int QUENE_COUNT = 100;//阻塞队列中允许传入的任务个数,初始参数
    private WorkThread[] workThreads;//池子中等待运行的线程
    private BlockingQueue<Runnable> queue;
    ;//阻塞队列中等待运行的任务
    private int workerNum;//池子中可以执行的线程个数,
    private int queneCount;//阻塞队列中允许传入的任务个数,

    //池中的线程
    private class WorkThread extends Thread {
   
        @Override
        public void run() {
   
            Runnable r = null;
            try {
   
                while (!interrupted()) {
   
                    r = queue.take();//获取需要执行的任务
                    if (r != null) {
   
                        System.out.println(getId() + " ready exec :" + r);
                        r.run();
                    }
                    r = null;//为了帮助gc
                }
            } catch (InterruptedException e) {
   
            }
        }

        public void stopWorker() {
   //中止线程
            interrupt();
        }
    }

    //构造方法
    // 创建线程池,worker_num为线程池中工作线程的个数
    public LeeThreadPoll(int worker_num, int taskCount) {
   
        if (worker_num <= 0) worker_num = WORK_NUM;
        if (taskCount <= 0) taskCount = QUENE_COUNT;
        this.workerNum = worker_num;
        queue = new ArrayBlockingQueue<>(taskCount);
        workThreads = new LeeThreadPoll.WorkThread
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值