zoukankan      html  css  js  c++  java
  • java线程池学习(二)

    new Thread 弊端:

       1、每次new Thread 新建对象,性能差

        2、线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多的系统资源导致死机或者OOM

        3、缺少更多的功能,如更多执行、线程中断等

    线程池--ThreadPoolExecutor 

       corePoolSize: 核心线程数量

       maxinumPool: 线程最大线程数

       workqueue: 阻塞队列,存储等待执行的任务,很重要,对线程池产生重大的影响 。

      keepaliveTime: 线程没有任务执行时,最多保持多久时间终止 。

     unit: keepalivetime 的时间单位

      threadFactory: 线程工厂,用来创建线程池使用的 。

      rejectHeader: 当拒绝处理任务时的策略

     线程池的几个状态: 

       1、 running : 接受新提交的任务,也能处理阻塞队列中的任务

        2、shutdown: 不能接受新提交的任务,但是可以处理线程池中正在等待的任务

       3、stop: 不能接受新提交的任务,也不能处理阻塞队列的任务

      4、tidying : 如果所有的任务都终止了,有效线程数为0 ,线程池会进入到该状态 

     execuor: 提交任务,交给线程池执行 

     submit : 提交任务,能够返回执行结果

     shutdown: 关闭线程池,等待所有的任务执行完

     shotdownnow: 关闭线程池,不等待所有的任务执行完

     gettaskcount : 获取已经执行和还没有执行的任务

     getcompletedTaskCount(): 获取已经执行完成的线程数量

     getpoolsize: 线程池当前的线程数量

     getactivecount: 当前线程池中正在执行的线程数量

    Executors.newCacheThreadPool : 创建一个可缓存的线程池,可以动态的扩展内存大小,并将使用完的内存资源进行回收 

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

    Executors.newScheduledThreadpool: 创建的已是一个订场的线程池,可以做到定时和周期性的执行任务。

    Executors.newSingleThreadExecutor: 单线程的线程池,所有的任务只能按照固定的顺序去执行

    线程池的合理配置:

       1、 CPU密集型任务,需要尽量压榨CPU的资源,参考值可以设置为NCPU+1 

       2、IO密集型的任务,参考值可以设置为2*NCPU

  • 相关阅读:
    Maven简介,安装,配置
    Centos 安装 Tomcat 并验证
    Centos 安装 jdk 和配置环境变量
    java基本数据类型
    centos7中docker安装并启动jpress
    在docker中访问网络
    在docker中运行一个nginx
    Centos7 安装docker 及使用其简单命令
    Centos7安装dnf工具管理rpm包
    C#获取外网IP地址;C#获取所在IP城市地址
  • 原文地址:https://www.cnblogs.com/wcgstudy/p/11509804.html
Copyright © 2011-2022 走看看