• 线程池策略(一)


    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

      java.util.concurrent.Executors可以产生三种线程池,线程执行的底层代码还是同一个。

      先解释一下ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory)这个类,

    corePoolSize:代表线程池中常存的线程数量。

    maximumPoolSize:指线程池最多可容纳的线程数量。

    keepAliveTime和unit:配合使用,前者是数字,后者是时间单位,意思是当某个线程在规定的时间内没有执行,就会被kill掉,等于0表示不会kill掉。

    workQueue:指等待执行的线程队列,有很多种,可以是数组实现的,也可以是链表实现的,所以它既可以是有界的,也可以是无界的。

    threadFactory:线程池线程产生的工厂类。

    1.newFixedThreadPool(int nThreads),newFixedThreadPool(int nThreads, ThreadFactory threadFactory)

      return 一个new ThreadPoolExecutor(xxx..),n代表的是线程池中固定可重用的数量,而corePoolSize和maximumPoolSize都等于这个n,所以如果一个任务被提交后,会先调用这n个线程中的一个执行,如果线程池满了,则进入workQueue队列等待,如果等待队列也满了,就比较线程池中是否已经达到最大执行线程数量,如果没有达到,放入线程池执行,如果达到了则拒绝接收任务并报reject异常。

    2.newCachedThreadPool(),ExecutorService newCachedThreadPool(ThreadFactory threadFactory),

      return 一个newThreadPoolExecutor(0, Integer.MAX_VALUE,60L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>());

    线程池初始线程数为0,可以一直增加到Integer的最大值,某个线程超过60s没有执行内容的话,就会被回收。其等待队列SynchronousQueue中的任务执行策略,默认构造函数为:

    public SynchronousQueue() {
            this(false);
        }

    下面另一个构造函数解释了false的含义:fair if true, waiting threads contend in FIFO order for access; otherwise the order is unspecified.所以显示指定了true才能保证先到先执行,否则未指明哪个先执行。

    所以当有特别的需要的时候,可以按照需要直接构建ThreadPoolExecutor。

  • 相关阅读:
    datagridview绑定xml
    为当前会话的所有作用域中的任何表最后生成的标识值。
    Installation failed with message Failed to finalize session : INSTALL_FAILED_INVALID_APK: Split lib_slice_8_apk was defined multiple times. It is possible that this issue is resolved by uninstalling a
    修改android Studio SDK 路径产生的问题(模拟器不能启动了)
    android 2.3.3 配置github的两步骤
    Android Studio 2.3.3 调用asp.net webService实战(拒绝忽悠)
    CSS style 属性
    Html fieldset、legend 标签
    Html lable 标签
    Html table、thead、tr、th、td 标签
  • 原文地址:https://www.cnblogs.com/azul0906/p/4214248.html
Copyright © 2020-2023  润新知