美文网首页
2020-11-05-Java-复习48(线程池基础)

2020-11-05-Java-复习48(线程池基础)

作者: 冰菓_ | 来源:发表于2020-11-28 07:56 被阅读0次

1.使用线程池的好处

  • 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
  • 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

2.Executor 框架的使用示意图

框架

3.ThreadPoolExecutor 3 个最重要的参数:

corePoolSize : 核心线程数线程数定义了最小可以同时运行的线程数量。
maximumPoolSize : 当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。
workQueue: 当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。

image.png

4.线程池的创建( Callable<> Runnable )

  private static final int CORE_POOL_SIZE = 6;
    private static final int MAX_POOL_SIZE = 10;
    private static final int QUEUE_CAPACITY = 100;
    private static final Long KEEP_ALIVE_TIME = 1L;

    public static void main(String[] args) {

        //使用阿里巴巴推荐的创建线程池的方式
        //通过ThreadPoolExecutor构造函数自定义参数创建
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
                CORE_POOL_SIZE,
                MAX_POOL_SIZE,
                KEEP_ALIVE_TIME,
                TimeUnit.SECONDS,
                new ArrayBlockingQueue<>(QUEUE_CAPACITY),
                new ThreadPoolExecutor.CallerRunsPolicy());

5,上下文切换

多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。

上下文切换通常是计算密集型的。也就是说,它需要相当可观的处理器时间,在每秒几十上百次的切换中,每次切换都需要纳秒量级的时间。所以,上下文切换对系统来说意味着消耗大量的 CPU 时间,事实上,可能是操作系统中时间消耗最大的操作。

相关文章

  • 2020-11-05-Java-复习48(线程池基础)

    1.使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度。当任务到...

  • 线程池

    线程池 时间 2018年6月13日 23:03:06;复习了一下基础的JAVA线程池知识 Single Threa...

  • Java基础复习 线程池

    线程池使用介绍好处:线程复用减少创建线程的开销方便线程的管理 corePoolSize 核心线程数量maximum...

  • 线程池

    线程池种类 ThreadPoolExecutor 基础线程池 线程执行任务过程 当前执行线程数 < corePoo...

  • Android 面试系统复习系列(四)线程 / 线程池 / 多线

    Android 面试系统复习系列(四)线程 / 线程池 / 多线程 线程 线程的状态 New ...

  • 3/18day13_线程池_死锁_线程的状态_定时器

    复习 今日内容 线程池[重点] 死锁 线程的状态[非常重要] 定时器[重点] 线程池方式 线程池的思想 如果并发的...

  • 多线程 | 4.线程池

    Java并发编程:线程池的使用 线程池基础 请求队列 线程池维护一定数量的线程,当线程池在运行状态的线程数量达上...

  • 线程池

    线程池基础概念 线程池是什么 线程池是一种基于池化思想的线程管理工具 线程池解决了哪些问题 降低资源消耗(操作系统...

  • Android中线程池的使用分析

    引言:说起线程池,学习过Java基础的同学估计都不陌生,Android中的线程池其实就是java的线程池。那么为什...

  • 线程池中你不容错过的一些细节

    线程池的工作原理 首先还是来复习下线程池的基本原理。 我认为线程池它就是一个调度任务的工具。 众所周知在初始化线程...

网友评论

      本文标题:2020-11-05-Java-复习48(线程池基础)

      本文链接:https://www.haomeiwen.com/subject/tfcovktx.html