java开发:java多线程(四):线程池

java多线程系列文章:
java多线程(一):synchronized 对象锁和类锁的区别
java多线程(二): wait()、sleep()、 join()和yield()区别
java多线程(三):lock方式实现线程同步机制

1.为什么要使用线程池

按我的理解是为了更好的管理线程,减少系统资源的消耗,因为每次创建和销毁一个线程都是要消耗系统资源的,而线程池可以对已有的线程进行复用,而当线程处于空闲超过一定时间会自动帮我们销毁。

2.线程池的参数

1、corePoolSize(核心线程数):当向线程池提交一个任务时,若线程池中的线程数小于核心线程数,即便此时存在空闲线程,也会创建一个新线程来执行该任务。

2、maximumPoolSize(线程池上限大小):线程池所允许的最大线程个数。当向线程池提交一个任务时发现线程数大于核心线程数,任务会提交到工作队列等待,若工作队列已满,则会判断线程池的线程数是否大于等于最大线程数,如果不是则创建新的线程执行任务,如果是则执行拒绝策略。

3、keepAliveTime(线程存活保持时间)当线程池中线程数大于核心线程数时,线程的空闲时间如果超过线程存活时间,那么这个线程就会被销毁,直到线程池中的线程数小于等于核心线程数。

4、workQueue(任务队列):用于传输和保存等待执行任务的阻塞队列。

5、handler(线程饱和策略):当线程池和队列都满了,再加入线程会执行此策略。

3. 线程池工作流程
在这里插入图片描述
4.四种常用的线程池

newSingleThreadExecutor(单一线程池),核心线程数和最大线程数都是1,当这个单一线程挂掉后会新创建新的线程。
创建方式:

 ExecutorService  executorService= Executors.newSingleThreadExecutor();
        for (int i = 0 ; i<10; i++){
            final int finalI = i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    Log.e("Tag",Thread.currentThread().getName()+ ","+finalI);

                }
            });
        }

newFixedThreadPool(固定大小线程池),核心线程数和最大线程数大小一样。
创建方式:

  ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);
        for (int i = 0 ; i<20; i++){
            final int finalI = i;
            fixedThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    Log.e("Tag",Thread.currentThread().getName()+ ","+finalI);
                }
            });
        }

newCachedThreadPool(可缓存的线程池),核心线程数为0,最大线程数为Integer最大值大小。当线程处于空闲,时间超过60秒后会自动销毁。

 ExecutorService  cachedThreadPool= Executors.newCachedThreadPool();
        for (int i = 0 ; i<200; i++){
            final int finalI = i;
            cachedThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    Log.e("Tag",Thread.currentThread().getName()+ ","+finalI);

                }
            });
        }

newScheduledThreadPool
调度线程池,即按一定的周期执行任务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值