zoukankan      html  css  js  c++  java
  • 使用和理解线程池

    1.使用线程池的目的:

     线程是稀缺资源,不能频繁的创建。

     解耦作用;线程的创建执行完全分开,方便维护。

    应当将其放入一个池子中,可以给其他任务进行复用

    2.线程池原理:

    核心的思想就是把宝贵的资源放到一个池子中;每次使用都从里面获取,用完之后又放回池子供其他人使用。

    3.配置线程池:

    常见的线程:

     Executors.newCachedThreadPool():无限线程池。

     Executors.newFixedThreadPool(nThreads):创建固定大小的线程池。

    Executors.newSingleThreadExecutor():创建单个线程的线程池

    public ThreadPoolExecutor(int corePoolSize,

                                  int maximumPoolSize,

                                  long keepAliveTime,

                                  TimeUnit unit,

                                  BlockingQueue<Runnable> workQueue) {

            this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,

                 Executors.defaultThreadFactory(), defaultHandler);

    }

    这几个核心参数的作用:

    corePoolSize 为线程池的基本大小。

    maximumPoolSize 为线程池最大线程大小。

    keepAliveTime unit 则是线程空闲后的存活时间。

    workQueue 用于存放任务的阻塞队列。

    handler 当队列和最大线程池都满了之后的饱和策略

    关闭线程池:

    有运行任务自然也有关闭任务,从上文提到的 5 个状态就能看出如何来关闭线程池。

    方法: shutdown()和shutdownNow()

    但他们有着重要的区别:

    shutdown() 执行后停止接受新任务,会把队列的任务执行完毕。

    shutdownNow() 也是停止接受新任务,但会中断所有的任务,将线程池状态变为 stop

  • 相关阅读:
    XP系统无法安装net framework 4.0 解决方法
    StructureMap DI & IoC 工具介绍
    Castle ActiveRecord学习实践(7)级联
    Error.popStackFrame 函数
    抽象泄漏(leaky abstraction)
    [Exception]IIS6:The entry "*" has already been added的解决方法
    ASP.NET 设计模式 读书摘记2
    PHP模块开发(一) PHP环境搭建
    PHP函数HTTP 相关函数
    PHP函数FTP文件传输函数
  • 原文地址:https://www.cnblogs.com/wnlsq/p/12163712.html
Copyright © 2011-2022 走看看