【高并发】14 线程池

    技术2024-10-17  23

    一、new Thread 弊端

    1、每次new Thread 新建对象,性能差

    2、线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或者OOM

    3、缺少更多功能,如更多执行、定期执行、线程中断

    二、线程池的好处

    1、重用存在的线程,减少对象创建、消亡的开销,性能佳

    2、可有效控制最大并发线程,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞

    3、提供定时执行、定期执行、单线程、并发数控制等功能

    三、线程池配置

    1、corePoolSize:核心线程数量

    2、maximumPoolSize: 线程最大线程数

    3、workQueue: 阻塞队列,存储等待执行的任务,很重要,会对线程池运行过程产生重大影响。

    4、keepAliveTime: 线程没有任务执行是最多保持多久时间终止

    5、unit: keepAliveTime的时间单位

    6、threadFactory: 线程工厂,用来创建线程

    7、rejectHandler: 当拒绝处理任务时的策略

    shutdown 阻塞队列为空 线程池中的工作线程数量为0 terminated shutdownNow 线程池中的工作线程数量为0 RUNNING SHUTDOWN TIDYING TERNINATED STOP

    四、线程池-ThreadPoolExecutor

    1、execute():提交任务,交给线程池执行

    2、submit():提交任务,能够返回执行结果 execute + Future

    3、shutdown(): 关闭线程池,等待任务都执行完

    4、shutdownNow(): 关闭线程池,不等待任务执行完

    5、getTaskCount(): 线程池已执行和未执行的任务总数

    6、getCompletedTaskCount():已完成的任务数量

    7、getPoolSize(): 线程池当前的线程数量

    8、getActiveCount(): 当前线程池中正在执行任务的线程数量

    五、线程池-Executor 框架接口

    1、Executors.nweCachedThreadPool

    2、Executors.newFixedThreadPool

    3、Executors.newScheduledThreadPool

    4、Executors.newSingleThreadExecutor

    六、线程池-合理配置

    1、CPU 密集型任务,就需要尽量压榨CPU ,参考值可以设为NCPU + 1

    2、IO 密集型任务,参考值可以设置为2*NCPU

    Processed: 0.013, SQL: 9