线程池

线程池

1.什么是线程池
创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数 有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作 线程。
从JDK1.5开始,Java API提供了Executor框架可以创建不同的线程池。比如单线程池,每次处理一个任务;数目固 定的线程池或者是缓存线程池(一个适合很多生存期短的任务的程序的可扩展线程池)

2.new Thread的弊端
每次new Thread新建对象性能差。
线程缺乏统一管理,可能无限制新建线程,相互之间竞争及可能占用过多系统资源导致死机或oom。
缺乏更多功能,如定时执行、定期执行、线程中断。
OutOfMemoryError即OOM的可能原因?
(1)数据库的cursor没有及时关闭 ;
(2)未关闭InputStream outputStream
(3)Bitmap 使用后未调用recycle()
(4)static等关键字 ;
(5)非静态内部类持有外部类的引用context泄露 ;
(6)流量/数据量峰值:应用程序在设计之初均有用户量和数据量的限制,某一时刻,当用户数量或数据量 突然达到一个峰值,并且这个峰值已经超过了设计之初预期的阈值,那么以前正常的功能将会停止,并 触发java.lang.OutOfMemoryError: Java heap space异常;
(7)内存泄漏:特定的编程错误会导致你的应用程序不停的消耗更多的内存,每次使用有内存泄漏风险的功 能就会留下一些不能被回收的对象到堆空间中,随着时间的推移,泄漏的对象会消耗所有的堆空间,最 终触发java.lang.OutOfMemoryError: Java heap space错误。

3.四种线程池的好处
(1)重用存在的线程,减少对象创建、消亡的开销,性能佳 ;
(2)可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞 ;
(3)提供定时执行、定期执行、单线程、并发数控制等功能。
4.线程池的工作原理
(1)线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核 心线程池里的线程都在执行任务,则执行第二步。
(2)线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里进行等待。 如果工作队列满了,则执行第三步.
(3)线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满 了,则交给饱和策略来处理这个任务。在这里插入图片描述

5.线程池一般流程
(1)corePoolSize线程池的核心大小 ;
(2)maximumPoolSize线程池中允许的最大线程数 ;
(3)workQueue阻塞任务队列。

6.常见问题总结
一般创建线程对象时不建议使用extends Thread方法 单根继承
一般没有返回结果时建议使用Runnable接口,如果有返回值一般建议使用Callable接口
如果使用线程比较频繁建议使用线程池。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值