线程池初学

    技术2025-07-08  20

    什么是线程池? 线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象

    为什么使用线程池 使用线程池的最大原因就是可以根据系统的需求和硬件环境灵活的控制线程的数量,且可以对所有线程进行统一的管理和控制,从而提高系统的运行效率,降低系统运行压力

    使用线程池有哪些优势 一 线程和任务分离,提升线程重用性 二 控制线程并发数量,降低服务器压力,统一管理所有线程 三 提升系统响应速度,免去了创建和销毁线程的时间

    public ThreadPoolExecutor( int corePoolSize, // 核心线程数量 int maximumPoolSize, // 最大线程数 loog keepAliveTime, // 最大空闲时间 TimeUint unit, // 时间单位 BlockingQueue Runnable workQueue, //任务队列 ThreadFactory threadFactory, // 线程工厂 RejectedExecutionHandler handler // 饱和处理机制 } corePoolSize: 当有一个任务提交到线程池时,如果当前运行的线程数量小于核心线程数,线程池会创建一个新的线程来执行这个任务 maximumPoolSize:线程池可以创建的最大的线程数量 keepAliveTime:存活时间,线程最多可以空闲的时间,超过这个时间后,线程池会回收该线程 workQueue:可以简单理解为一个集合,当线程数量达到核心线程数量,并且所有线程都忙碌时,当新的任务提交到线程池后,任务会进入到任务队列中。当任务队列加满之后,才会创建新的线程,但线程数量不会超过最大线程数 threadFactory:通过这个参数你可以自定义如何创建线程 handler:当任务队列已满,且线程数达到最大线程数,并且所有线程都忙碌时,又有新的任务提交到线程池,线程池会拒绝接收。拒绝的策略根据handler来定

    ExecutorService接口是java内置的线程池接口 常用方法: void shutdown() 启动一次顺序关闭,执行以前提交的任务,但不接受新任务 List<Runnable shutdownNow()停止所有正在执行的任务,暂停处理正在等待的任务,并返回等待执行的任务列表 submit(Callable T task) 执行带返回值的任务,并返回一个Future对象 submit(Runnable task) 执行Runnable任务,并返回一个表示该任务的Future submit(Runnable task, T result) 执行Runnable任务,并返回一个表示该任务的Future

    核心线程数:8020,可以按照百分之八十的情况设计核心线程数 任务队列长度:核心线程数/单个任务执行时间 ** 2 最大线程数:(最大任务数 - 任务队列长度)* 单个任务执行时间

    Processed: 0.012, SQL: 9