Java多线程学习笔记(七)--线程池

本文介绍了Java多线程中的线程池,重点讲解了ThreadPoolExecutor的构造参数,如核心线程数、最大线程数、存活时间、任务队列类型等,并探讨了无界队列和有界队列的优缺点。同时,文章提到了四种拒绝策略:AbortPolicy、CallerRunsPolicy、DiscardOledestPolicy和DiscardPolicy,以及不同线程池实现的特性,如FixedThreadPool、SingleThreadExecutor、CachedThreadPool和SingleThreadScheduledExecutor。
摘要由CSDN通过智能技术生成

强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan

什么是线程池

为了避免系统频繁地创建和销毁线程,我们可以让创建的线程进行复用,线程池是来管理线程的,线程池中总有那么几个活跃线程,当使用线程时可以从池子中随便拿一个空闲线程,当完成工作时,不用立即关闭线程,而是将线程还给线程池,方便下一个要使用线程的任务,有了线程池后,创建线程变成是从线程池中拿线程,销毁线程时变成是将线程还给线程池继续管理。 这种场景非常像在开发中连接数据库,有一个数据库连接池,需要创建连接时是从连接池中拿一个连接,释放时是将连接还给连接池

解决了什么问题

**1.多线程解决了什么问题:**之前的电脑是单核的,cpu的资源在多个线程间来回切换,现在发展的很快,电脑大多都是多核的,多线程可以考虑并行的问题,可以有效的利用cpu的资源,提高资源利用率和系统运行效率 **2.线程池解决了什么问题:**创建和销毁线程时需要消耗资源,创建出来的线程是占用内存的,线程池是来管理线程的,那么问题来了,什么时候使用线程池呢?是需要使用多线程解决问题的时候就使用线程池吗?答案是否定的,因为刚才说过了,创建出来的线程是占用空间的,因此线程池的使用场景是在需要大量线程的情况下,我们使用线程池管理线程,相当于把线程池的创建和销毁均分给了多个任务,在未使用线程池的时候是每个任务执行时都需要去创建和销毁线程,因此,线程池在资源耗费较大的时候,可以有效的避免频繁的创建和销毁线程,从而节省资源,线程本身也会占用内存空间,如果处理不当可能会导致Out of Memory异常,因此选择正确的等待队列是必要的,具体的会在下边详细讲解。

Executor框架结构图

![本图来自网上](https://img-blog.csdn.net/20180519153225545?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poMTU3MzI2MjE2Nzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 上图来自于网络 1.Executor是该框架结构图中的最基础的接口,其中定义了线程池execute方法 2.ExecutorService也是一个接口,继承自Executor,定义了线程池的提交及停止,及其他一些判断线程池状态的方法 3.ThreadPoolExecutor是线程池的核心实现类,用来执行被提交的任务 4.ScheduledExecutorService提供定时执行功能 5.还有一个是Executors,在本图中没有写出,Executors充当一个工厂角色,通过它可以取得一个拥有特定功能的线程池,目前提供的有四种线程池

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值