zoukankan      html  css  js  c++  java
  • Java并发包中线程池的种类和特点介绍

    Java并发包提供了包括原子量、并发集合、同步器、可重入锁、线程池等强大工具这里学习一下线程池的种类和特性介绍。

    如果每项任务都分配一个线程,当任务特别多的时候,可能会超出系统承载能力。而且线程的创建和销毁是非常耗费资源的操作。如果我们在系统启动时就维持几个固定的线程,如果有新的任务到来就分配这些线程来执行操作,当操作完成后继续等待新的任务到来,这样我们就有了一个线程池。

    通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于ExecutorService类型或者不同的初始参数,Executors目前提供了五种不同的线程池创建配置

    ①newCachedThreaPool(),它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓村线程可重用时,就会创建新的工作线程;如果线程闲置的时间超过60秒,则被终止并移出缓存;长时间闲置时,这种线程池并不会消耗什么资源,其内部使用SynchronousQueue作为工作队列

    ②newFixedThreadPool(), 拥有固定线程数的线程池,背后使用的是无界的工作队列,可以通过参数设置线程池的大小,可以随意设置,也可以和cpu的核数量保持一致,获取cpu的核数int cpuNums=Runtime.getRuntime().availableProcessors();

    ③newSingleThreadExecutor(),它的特点在于工作线程数目被限制为1,因此所有提交的任务是顺序执行

    ④newSingleThreadScheduledExcutor()和newScheduleThreadPool(int corePoolSize),可以定时或者周期性的工作调度,区别在单一工作线程还是多个工作线程

    ⑤newWorkStealingPool(int parallelism),Java8才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行的处理任务,不保证处理顺序

  • 相关阅读:
    栈的概念
    什么是 JavaConfig?
    数据库连接池的原理。为什么要使用连接池。
    根据你以往的经验简单叙述一下MYSQL的优化
    动态横切
    横切技术
    什么是AOP
    BIO ,NIO ,AIO 有什么区别?
    简述Comparable和Comparator两个接口的区别
    Spring Boot 客户端?
  • 原文地址:https://www.cnblogs.com/baxianhua/p/9442848.html
Copyright © 2011-2022 走看看