线程池ThreadPoolExecutor

12 篇文章 0 订阅

1.为什么使用线程池,优势     

        线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建后启动这些任务,如果线程超过了最大数量,超出的数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行.

        他的主要特点为:线程复用:控制最大并发数:管理线程.

        第一:降低资源消耗.通过重复利用自己创建的线程降低线程创建和销毁造成的消耗.

        第二: 提高响应速度.当任务到达时,任务可以不需要等到线程和粗昂就爱你就能立即执行.

        第三: 提高线程的可管理性.线程是稀缺资源,如果无限的创建,不仅会消耗资源,还会降低系统的稳定性,使用线程池可以进行统一分配,调优和监控.

2.线程池如何使用?

        

(1)架构实现

        Java中的线程池是通过Executor框架实现的,该框架中用到了 Executor,Executors,ExecutorService,ThreadPoolExecutor这几个类.

         (2)编码实现

        了解

        Executors.newCachedThreadPool();

        java8新出:Executors.newWorkStealingPool(int); java8新增,使用目前机器上可以的处理器作为他的并行级别

        重点

        ① Executors.newFixedThreadPool(int) 执行一个长期的任务,性能好很多

        主要特点如下:

        1).创建一个定长线程池,可控制线程的最大并发数,超出的线程会在队列中等待.

        2).newFixedThreadPool创建的线程池corePoolSize和MaxmumPoolSize是 相等的,它使用的的LinkedBlockingQueue

        ② Executors.newSingleThreadExecutor() 一个任务一个线程执行的任务场景

        主要特点如下:

        1).创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务都按照指定顺序执行.

        2).newSingleThreadExecutor将corePoolSize和MaxmumPoolSize都设置为1,它使用的的LinkedBlockingQueue

        ③ Executors.newCachedThreadPool() 适用:执行很多短期异步的小程序或者负载较轻的服务器

        主要特点如下:

        1).创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则创建新线程.

        2).newCachedThreadPool将corePoolSize设置为0MaxmumPoolSize设置为Integer.MAX_VALUE,它使用的是SynchronousQUeue,也就是说来了任务就创建线程运行,如果线程空闲超过60秒,就销毁线程

 案例

public class MyThreadPoolDemo {
    public static void main(String[] args) {
        //一池5个处理线程
        //ExecutorService threadPool= Executors.newFixedThreadPool(5);
        //一池一线程
        //ExecutorService threadPool=Executors.newSingleThreadExecutor();
        //一池N线程
        ExecutorService threadPool=Executors.newCachedThreadPool();

        //模拟10个用户办理业务,每个用户就是一个来做外部的请求线程
        try{
            for (int i = 1; i <=10 ; i++) {
                threadPool.execute(()->{
                    System.out.println(Thread.currentThread().getName()+"\t"+"办理业务");
                });
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            threadPool.shutdown();
        }
    }
}

(3)线程池底层 ThreadPoolExecutor

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值