Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)

简介: ①. ThreadPoolExecutor谈谈你的理解?②. 线程池的七大参数

①. ThreadPoolExecutor谈谈你的理解?


  • ①. 为什么使用线程池,优势?


线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建

后启动这些任务,如果显示超过了最大数量,超出的数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行.


它的主要特点为:线程复用 | 控制最大并发数 | 管理线程.


②. 线程池如何使用(Java中的线程池是通过Executor框架实现的,该框架中用到了Executor,Executors,ExecutorService,ThreadPoolExecutor这几个类)


微信图片_20220106183123.png


  • ③. 方法详解与代码实现


三个方法(掌握)

(1).Executors.newFixedThreadPool(int) : 一池定线程


微信图片_20220106183147.png


(2).Executors.newSingleThreadExecutor( ) : 一池一线程


微信图片_20220106183205.png


(3).Executors.newCachedThreadPool( ) : 一池N线程


微信图片_20220106183224.png微信图片_20220106183228.png


/*
//看cpu的核数
//System.out.println(Runtime.getRuntime().availableProcessors());
* 第四种获取/使用java多线程的方式,线程池
* */
public class ExecutorTest {
    public static void main(String[] args) {
        //ExecutorService threadPool= Executors.newFixedThreadPool(5);//一池5个处理线程
        //ExecutorService threadPool=Executors.newSingleThreadExecutor();//一池一线程
        ExecutorService threadPool=Executors.newCachedThreadPool();//一池N线程
        try {
            for (int i = 1; i <= 10; i++) {
                //使用
                threadPool.execute(() -> {
                    //模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程
                    System.out.println(Thread.currentThread().getName() + "\t 办理业务~!");
                });
                //try { TimeUnit.SECONDS.sleep(3);  } catch (InterruptedException e) {e.printStackTrace();}
            }
        }catch (Exception e){
        }finally {
            //关闭
            threadPool.shutdown();
        }
    }
}


②. 线程池的七大参数


①. corePoolSize:线程池中的常驻核心线程数


在创建了线程池后,当有请求任务来之后,就会安排池中的线程去执行请求任务,近似理解为今日当值线程


当线程池中的线程数目达到corePoolSize后,就会把到达的任务放入到缓存队列当中.


②. maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值大于等于1


③. keepAliveTime:多余的空闲线程存活时间,当空间时间达到keepAliveTime值时,多余的线程会被销毁直到只剩下corePoolSize个线程为止(非核心线程)


④. unit:keepAliveTime的单位


⑤. workQueue:任务队列,被提交但尚未被执行的任务(候客区)


⑥. threadFactory:表示生成线程池中工作线程的线程工厂,用户创建新线程,一般用默认即可(银行网站的logo | 工作人员的制服 | 胸卡等)


⑦. handler:拒绝策略,表示当线程队列满了并且工作线程大于等于线程池的最大显示 数(maxnumPoolSize)时如何来拒绝


微信图片_20220106183314.png


微信图片_20220106183335.png


相关文章
|
3天前
|
Java
解析Java线程池:参数详解与执行流程
解析Java线程池:参数详解与执行流程
7 1
|
2天前
|
安全 Java 开发者
Java并发编程中的线程安全策略
在现代软件开发中,Java语言的并发编程特性使得多线程应用成为可能。然而,随着线程数量的增加,如何确保数据的一致性和系统的稳定性成为开发者面临的挑战。本文将探讨Java并发编程中实现线程安全的几种策略,包括同步机制、volatile关键字的使用、以及java.util.concurrent包提供的工具类,旨在为Java开发者提供一系列实用的方法来应对并发问题。
9 0
|
3天前
|
存储 Java
Java线程池参数详解及其示例
Java线程池参数详解及其示例
6 0
|
5天前
|
存储 设计模式 并行计算
CopyOnWriteArrayList:深入理解Java中的线程安全List原理和应用
CopyOnWriteArrayList:深入理解Java中的线程安全List原理和应用
|
5天前
|
缓存 监控 Java
深入Elasticsearch:线程池的原理与应用
深入Elasticsearch:线程池的原理与应用
|
5天前
|
Java
线程池ThreadPoolExcutor源码剖析---工作原理
线程池ThreadPoolExcutor源码剖析---工作原理
|
5天前
|
Java
详尽分享线程池的4种拒绝策略
详尽分享线程池的4种拒绝策略
|
17天前
|
缓存 算法 Java
深入解析线程上下文切换的原理与优化策略
深入解析线程上下文切换的原理与优化策略
27 0
|
4天前
|
存储 测试技术
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
12 0
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
|
5天前
|
数据采集 Java Unix
10-多线程、多进程和线程池编程(2)
10-多线程、多进程和线程池编程