• 面试~线程池三大方法、七个参数、四种拒绝策略、实际应用



    池化技术

    程序的运行,本质:占用系统的资源! 优化资源的使用!=>池化技术

    线程池、连接池、内存池、对象池///..... 创建、销毁。十分浪费资源


    池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。


    线程池的好处:

    1、降低资源的消耗 2、提高响应的速度 3、方便管理。

    线程复用、可以控制最大并发数、管理线程



    ★ 总结Java线程池的基本工作原理/线程池的执行流程:

    image

    • 以上是考虑到满了的情况,当然这个过程是动态的,核心线程中执行完任务,就可以到任务队列拿任务去执行,任务队列空了,新提交的任务也可以放到任务队列中去。



    三大方法

    • 创建单个线程、创建固定线程数量的、具有缓存作用的
    ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程
    ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一个固定的线程池的大小
    ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩的,遇强则强,遇弱则弱
    



    七个参数

    public ThreadPoolExecutor(int corePoolSize, //核心线程池大小
    						int maximumPoolSize, //最大核心线程池大小
    						long keepAliveTime, //超时了没有人调用就会释放
    						TimeUnit unit, //超时单位
    						BlockingQueue<Runnable> workQueue, //阻塞队列
    						ThreadFactory threadFactory, //线程工厂:创建线程的,一般不用动
    						RejectedExecutionHandler handle //拒绝策略
    ) 
    



    四种拒绝策略

     new ThreadPoolExecutor.AbortPolicy() //默认策略,抛出异常
     new ThreadPoolExecutor.CallerRunsPolicy() // 哪来的去哪里!将此任务交给调用者直接执行
     new ThreadPoolExecutor.DiscardPolicy() //不做任何操作
     new ThreadPoolExecutor.DiscardOldestPolicy() //丢弃队列中最老的任务,然后再执行该任务
    



    池的最大的大小如何去设置!

    了解:IO密集型,CPU密集型:(调优)

    1、CPU 密集型,几核,就是几,可以保持CPu的效率最高!

    2、IO 密集型 > 判断你程序中十分耗IO的线程, // 程序 15个大型任务 io十分占用资源!那么就设置为它的两倍,设置为30

     // 获取CPU的核数 
    System.out.println(Runtime.getRuntime().availableProcessors());
    



    线程池的应用

    1、发短信业务

    在登录界面,使用手机号+验证码登录

    特点:主业务和短信业务可以割裂开来。

    当我们点击验证码的时候,连接短信业务平台发送短信,但是发送短信的业务会受到平台的影响,会有一定的延时。

    我们使用线程池,就可以不用等到短信平台返回验证码之后再给用户返回。

    我们先提示用户验证码获取成功,然后把短信业务放到另外一个线程中执行,使用线程池管理短信线程。

    具体过程是:生成验证码,然后 调用线程池中的自定义的“短信线程”,调用短信平台,发送验证码;然后把验证码放入redis



    2、多线程下载器

    将需要下载的资源分块,然后开启多个线程,每个线程负责一块资源的下载。



    3、还有我的博客项目也是运用了线程池

    自定义一个线程来处理更新阅读浏览量,然后放到线程池进行管理。

  • 相关阅读:
    TinyOS在ubuntu 14.04下安装教程
    C++ STL标准入门
    C++ 模板
    多态
    C++继承
    C++类型转换 -- 由其他类型转换到自定义类型
    运算符重载
    友元
    typedef用法
    c++细节--section1
  • 原文地址:https://www.cnblogs.com/shan333/p/16660601.html
Copyright © 2020-2023  润新知