多线程学习 线程池TheadPoolExecutor的使用

创建一个线程池

ThreadPoolExecutor(
  int corePoolSize,
  int maximumPoolSize,
  long keepAliveTime,
  TimeUnit unit,
  BlockingQueue<Runnable> workQueue,
  ThreadFactory threadFactory,
  RejectedExecutionHandler handler) 

corePoolSize: 最小线程数

maximumPoolSize:最大先线程数

keepAliveTime,unit:空闲超时策略

workQueue:排队队列

threadFactory:自定义创建线程策略

handler:自定义拒绝策略,通过handler指定的策略自定义拒绝方案,目前支持

CallerRunsPolicy

AbortPolicy

DiscardPolicy

DiscardOldestPolicy

注意事项

强烈建议使用有界队列:无界队列容易导致oom,而oom会导致所有的请求不可用。使用executor创建线程池,会导致oom问题,因为很多队列都使用

甚用默认拒绝策略:默认拒绝会抛出运行异常,运行异常在编译阶段不会强制catch。这样会导致线程停止,但是最重要的是没有任何通知,这样会导致开发者以为任务正常执行。处理这类问题,最稳妥的还是try catch捕获异常。

发布了23 篇原创文章 · 获赞 19 · 访问量 1415

猜你喜欢

转载自blog.csdn.net/u012335601/article/details/89646897