Java进阶学习

线程池理解

2019-04-17  本文已影响0人  Sum_Day

我的Github地址

有问题直接留言或 联系QQ:1079569023


Thread线程

  1. Linux:一个进程:1000个Thread限制
  2. Windows:20000个Thread

ThradPoolExecutor

  1. corePoolSize:核心线程数,缓存的线程数量
  2. maximumPoolSize: 10
BlockingQueue到达最大容量后,可以添加的任务数量 

10:用来在增加5个线程来执行任务,最多存在10个线程
  1. keepAliveTime:
任务数量减少后,只会杀掉maximumPoolSize定义多出来的几个线程,不会杀掉核心线程数
  1. BlockingQueue:到达核心线程数后,任务存放点
阻塞队列:先进先出,队列满的时候,放任务的线程会被阻塞

1.add,remove->add满的时候,直接抛异常
2.offer,pull->add满的时候,不抛异常
3.put,take ->会阻塞调用线程,主要是用这个

Android常用2个阻塞对列
LinkedBlockingQueue/ArrayBlockingQueue
  1. RejectedExecutionHandler:任务超出BlockingQueue+maximumPoolSize 后,执行的拒绝策略
1.抛弃最早的任务
2.直接抛出异常(AbortPolicy默认参数)
3.原线程执行
4.直接抛弃

6.合理配置线程池

1.CPU密集型:线程池个数不要超过系统CPU核心数
Runtime.getRuntime.availableProessors

2.IO密集型:无法确定IO操作数量
缺省默认是:2*CPU个数

3.参考Android中的AsyncTask
上一篇下一篇

猜你喜欢

热点阅读