zoukankan      html  css  js  c++  java
  • java 线程池

    ThreadPoolExecutor
    Executer 静态方法可以

    • newFixedThreadPool可以生成固定大小的线程池;
    • newCachedThreadPool可以生成一个无界、可以自动回收的线程池;
    • newSingleThreadScheduledExecutor可以生成一个单个线程的线程池;
    • newScheduledThreadPool还可以生成支持周期任务的线程池。
      也可以new一个ThreadPoolExecutor

    我们基本只要使用这个执行器就行了,可以设置或获取配置信息,比如多大啊,等多久啊,用什么队列实现啊
    或者对这个执行器扩展一下,自己new一个,还以用来处理自己任务前干啥,任务后干啥。

    submit可以返回任务执行结果
    submit里会调用execute
    或者直接你也可以execute 添加任务
    如果线程<corePoolSize 会创建线程,去执行任务,毕竟不用白不用,线程不能留着空
    否则看workQueue队列是否满了,没满加到队列里等,因为线程够多了,先等等
    若果workQueue也满了,线程数量<maximumPoolSize,因为队列满了,但是任务还是要做,所以还是会创建线程去执行任务
    如果线程数到允许上限了,就会返回失败了。。。

    然后当线程数不足corePoolSize的时候keepAliveTime,没用会一直等任务,因为反正可以让其它线程去干想干的事情
    如果线程够corePoolSize了getTask()的时候,不会一直等,只会等keepAliveTime的时间,没任务,就算超时了,去干下一件事

    可以用shutdown(),等任务都弄完了,关掉线程池,用了shutdown就不能加任务了
    用shutdownNow(),就不会等任务做完,就直接关线程池了
    waitTermination()会阻塞的等指定时间,返回任务完成没,不会做什么实际的事情,不会关线程池,也可以接着添加任务

    还有几种队列
      ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。
      LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列。
      SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
      PriorityBlockingQueue:一个具有优先级的无限阻塞队列。
    ThreadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。
    RejectedExecutionHandler(饱和策略):当队列和线程池都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务。这个策略默认情况下是AbortPolicy,表示无法处理新任务时抛出异常。以下是JDK1.5提供的四种策略。
      AbortPolicy:直接抛出异常。
      CallerRunsPolicy:只用调用者所在线程来运行任务。
      DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
      DiscardPolicy:不处理,丢弃掉。
      当然也可以根据应用场景需要来实现RejectedExecutionHandler接口自定义策略。如记录日志或持久化不能处理的任务。

  • 相关阅读:
    java四种数组排序
    hadoop安装及配置
    Talend初试,实现定时同步
    JAVA语言概述和基本语法知识点
    Maven项目资源文件打包错误
    Ajax同步和异步
    Nginx + Tomcat 负载均衡
    PLSQL安装配置
    WebStorm 设置光标位置不随意停靠
    Hello Node.js
  • 原文地址:https://www.cnblogs.com/HaibaraAi/p/6538320.html
Copyright © 2011-2022 走看看