工作中有个任务需要写多线程记录一下登陆日志,楼主之前没用过多线程,所以趁着这个机会了解下线程池
关于线程池的几个参数就不多说了,一搜索网上一大堆解释,还是贴一张源码图吧!
我很常规的设置了这些参数,核心线程数:5 最大线程数:Integer.MaxValue 存活时间:60s 阻塞队列:synBlockinQueue()
饱和策略重写的
后来code review的时候发现阻塞队列里面没有存储,就是直接线程过来那单个任务进行处理! 相当于说队列没有什么用处(newFixedThreadPool())使用的就是这种阻塞队列! 后来考录到了我们并发量不是很大,从性能 以及cpu的损耗上来看就选择了ArrayBlockingQueue,不需要动态扩容内存消耗小! 队列容量500 最大线程数:1000(暂定的)
拒绝策略: 重写了拒绝策略
本来是想把被拒绝的线程的用户信息打印出来的,但是后来还是没打印出来! 自己理解的是线程池初始化的时候就需要初始化拒绝策略. 如果真的达到最大线程数并且无空闲线程 阻塞队列已满,进入拒绝策略的用户信息也是我们拿到的第一个线程处理的用户信息! 后来换了一种策略: 将被拒绝的线程再一次添加到阻塞队列当中,也不将此线程丢弃,如果添加失败之后再丢弃(简单粗暴!!!)
贴上一段拒绝策略的代码~
楼主比较渣,把大概的点记录了一下~