2020-01-13——线程池

对线程知识的相关思考


ThreadPoolExecutor 用来创建自定义的线程池;

corePoolSize, 核心线程数

maximumPoolSize,最大线程数,不能超过核心线程数

keepAliveTime, 存活时间 普通线程能够存活的时间

unit, 单位

workQueue,队列四种

Executors.defaultThreadFactory(), 线程工厂 暂时没研究

handler 丢弃策略

1.整个流程是这样的,任务到来;

2.用核心线程进行处理 如果有十个核心线程,就处理十个任务;

3.核心线程被用完了,再到来的任务需要加入到队列之中;

4.队列中满了,开始创建非核心线程进行处理,最大能创建的非核心线程数是max-core

5.处理剩余的任务,关闭线程池;


创建一个自定义的线程池

private static ExecutorServicees =

new ThreadPoolExecutor(0,100,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(1000),new ThreadPoolExecutor.CallerRunsPolicy());


如果 此时来了1500个任务,这个时候 会先将一千个任务放到队列中,

剩下的再来,队列满了开始创建非核心线程 100个 

然后从队列中拉去100个任务开始处理 这样就还有400个任务在没有进队列,

此时因为用了CallerRunsPolicy()策略 这几百个任务交给主线程去处理;

马上线程池中一百个任务处理完了 然后400个里面会有100个线程进队列;

300个交给主线程去处理;

直到全部处理完成;



case1



如果是1100个 那么自始至终不会动用 主线程;

如果小于 那么队列不满,就只创建一个非核心线程慢慢跑


四种处理策略

1.CallerRunsPolicy 字面翻译 呼叫运行的线程,谁调用我 我找谁帮忙;

2.discardPolicy 直接丢弃 如果上面 1500用了这个策略就没有前边400个事情了;

3.discardOldestPolicy 丢弃在队列中存在时间最长的

4.AbortPolicy 默认值;抛出RejectedExecutionException异常;



LinkedBlockingQueue 无限长 的队列 但是可以设置长度;

ArrayBlockingQueue 必须设置长度 而且任务不能超过;


还有一个要记住

ExecuteService es = new ThreadPoolExecutor(...)

可以看出来 继承关系

ThreadPoolExecutor 继承了 AbstractExecutorService ;

AbstractExecutorService 实现了 ExecutorService;

ExecutorService 实现了 Executor ;

Executor 定义了submit 方法;


Executors是一个类和他们都没有关系 它里面搞了很多静态方法

Executors.newSingleThreadExecutor();

Executors.newFixedThreadPool(1);

Executors.newCachedThreadPool();

Executors.newScheduledThreadPool(1);

没啥用还是得自己建,阿里公约什么的说的

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

推荐阅读更多精彩内容

  • 一、wait--notify--sleep Object obj = new Object(); obj.wait...
    fe0180bd6eaf阅读 2,701评论 0 1
  • 深入分析线程池 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如...
    史路比阅读 3,211评论 0 1
  • 前言 线程池是Java中的一个重要概念,从Android上来说,当我们跟服务端进行数据交互的时候我们都知道主线程不...
    老实任阅读 4,996评论 1 9
  • 在生活中我们总是能听到XX和XX很相配 ,因为他们家世差不多,收入差不多,工作都有好单位,所以他们很配 然...
    YOYO婚礼及活动策划阅读 1,839评论 0 1
  • es6新增了箭头函数, 先来看一个以前的例子 使用了箭头函数 如果是上面这样还可以简写为 this指向问题 箭头函...
    yiyun021阅读 1,781评论 0 0