3.线程池的使用

1.线程池的出现

java对象占用堆内存,操作系统线程占用系统内存,根据jvm规范,一个线程默认最大栈大小为1M,线程过大,会消耗很多的内存。

线程池的出现,就是为了方便控制线程数量。

2.线程池原理

理解 线程池管理器、工作线程、任务接口、任务队列。

线程池管理器:用于创建并管理线程池,包括线程池的创建、销毁、添加新任务。

工作线程:线程池中的线程,在没有任务时处于等待状态。

任务接口:每个任务必须实现的接口(Runnable接口),以供工作线程调度任务的执行。

任务队列: 用于存放没有处理的任务。提供一种缓冲机制。

在这里插入图片描述

3.线程池线相关api

接口:Executor、ExecutorService、ScheduledExecutorService

实现类:ThreadPoolExecutor、ScheduledThreadPoolExcutor

类型名称描述
接口Executor最顶层接口,定义执行任务方法execute
接口ExecutorService继承Executor,扩展Callable、Future、shutdown关闭方法
接口ScheduledExecutorService继承ExcutorService,扩展定时相关方法
实现类ThreadPoolExecutor基础、标准的线程池实现,其他线程池都是基于此进行扩展的
实现类ScheduledThreadPoolExcutor继承ThreadPoolExecutor,实现了定时任务相关的方法。

Executors工具类,创建线程池的工具类。这些线程池都是ThreadPoolExecutor的扩展,见名知意,不详述。

在这里插入图片描述

4.合理设置线程数

如何设置合理的线程池中的线程数呢?

计算型任务:cpu数量的1-2倍。

IO型任务:相对比计算型任务,需要多一些线程,要根据具体的IO阻塞时常进行考虑,如tomcat默认最大线程:200。

也可以根据需要设置最小数量和最大数量,如db连接池。

上一篇:2.线程封闭之Threadlocal
下一篇:4.源码中的HashMap与JUC之ConcurrentHashMap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值