Executor与线程池_ExecutorService与CompletionService

创建的是缓存线程池

使用线程池的好处

1.降低资源消耗(复用线程) 2.提高响应速度(不需要创建线程) 3.提高线程的可管理性

线程池的几个参数

1.corePoolSize(核心线程池基本大小) 2.maxmumPoolSize(线程池最大线程数)

3.keepAliveTime(线程活动保持时间),4.TimeUnit(线程活动保持时间的单位,day-nanos)

5.runnableTaskQueue(工作队列) ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue,PriorityBlockingQueue

6.RejectedExecutionHandler(饱和策咯)

AbortPolicy直接抛出异常,CallerRunsPolicy只用调用者所在线程来运行任务,DiscardOldestPolicy丢弃队列里最近的一个任务,执行当前任务;DiscardPolicy不处理,丢弃

固定线程池,0L,则任务完成后立刻删除,那么仍然需要创建线程,则怎么复用? 还是先判断任务队列没job再丢弃?

线程池流程

配置线程池大小: 可通过Runtime.getRuntime().availableProcessors()获得当前CPU数

1.CPU密集型--N(cpu)+1;2.IO密集型--2*N(cpu)

使用线程池不仅可以提高应用的响应时间,还可以避免"java.lang.OutOfMemoryError: unable to create new native thread"之类的错误。

建议设置为有界队列

StackOverflowError是由于当前线程的栈满了 那么二者有什么区别?

线程池监控

taskCount:线程池需要执行的任务数量

completedTaskCount:线程池在运行过程中已完成的任务数量

largestPoolSize:线程池曾创建过的最大线程数量

getPoolSize:线程池的线程数量

getActiveCount:活动的线程数


Executor


Executor, ExecutorService 和 Executors 间的不同

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容