`
yychao
  • 浏览: 98521 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ThreadPoolExecutor机制

阅读更多

ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程调度,线程池管理等等服务;Executors方法提供的线程服务,都是通过参数设置来实现不同的线程池机制。先来了解其线程池管理的机制,有助于正确使用,避免错误使用导致严重故障。


先来看看ThreadPoolExecutor都有那些参数:

    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
}

 

参数名 作用

corePoolSize

核心线程池大小

maximumPoolSize

最大线程池大小

keepAliveTime

线程池中超过corePoolSize数目的空闲线程最大存活时间;可以allowCoreThreadTimeOut(true)使得核心线程有效时间

TimeUnit

keepAliveTime时间单位

workQueue

阻塞任务队列

threadFactory

新建线程工厂

RejectedExecutionHandler

当提交任务数超过maxmumPoolSize+workQueue之和时,任务会交给RejectedExecutionHandler来处理;

 

其中比较容易让人误解的是:corePoolSize,maximumPoolSize,workQueue之间关系。

 

 

  1. 当线程池小于corePoolSize时,新提交任务将创建一个新线程执行任务,即使此时线程池中存在空闲线程。
  2. 当线程池达到corePoolSize时,新提交任务将被放入workQueue中,等待线程池中任务调度执行
  3. 当workQueue已满,且maximumPoolSize>corePoolSize时,新提交任务会创建新线程执行任务
  4. 当提交任务数超过maximumPoolSize时,新提交任务由RejectedExecutionHandler处理
  5. 当线程池中超过corePoolSize线程,空闲时间达到keepAliveTime时,关闭空闲线程
  6. 当设置allowCoreThreadTimeOut(true)时,线程池中corePoolSize线程空闲时间达到keepAliveTime也将关闭

线程池管理机制图示:


了解了线程池管理机制,可以看看Executors提供的线程池配置方案:

 

 

    public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>(),
                                      threadFactory);
    }

 FixedThreadPool:配置的corePoolSize与maximumPoolSize大小相同,同时使用了一个无界LinkedBlockingQueue存放阻塞任务,因此多余的任务将存在再阻塞队列,不会由RejectedExecutionHandler处理;

 

 

    public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>(),
                                      threadFactory);
    }

 cachedThreadPool:配置corePoolSize=0,maximumPoolSize=Integer.MAX_VALUE,keepAliveTime=60s,以及一个无容量的阻塞队列 SynchronousQueue,因此任务提交之后,将会创建新的线程执行;线程空闲超过60s将会销毁;

 

 

    public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>(),
                                    threadFactory));
    }

 singleThreadExecutor:配置corePoolSize=maximumPoolSize=1,无界阻塞队列LinkedBlockingQueue;保证任务由一个线程串行执行

 

 

    public static ScheduledExecutorService newScheduledThreadPool(
            int corePoolSize, ThreadFactory threadFactory) {
        return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
    }

 

    public ScheduledThreadPoolExecutor(int corePoolSize,
                             ThreadFactory threadFactory) {
        super(corePoolSize, Integer.MAX_VALUE, 0, TimeUnit.NANOSECONDS,
              new DelayedWorkQueue(), threadFactory);
    }

 scheduledThreadPoolExecutor:配置corePoolSize,无界延迟阻塞队列DelayedWorkQueue;有意思的是:maximumPoolSize=Integer.MAX_VALUE,由于DelayedWorkQueue是无界队列,所以这个值是没有意义的。

 

关于ThreadPoolExecutor线程池管理机制介绍到此,对于其线程调度方面的内容,之后在做介绍。

  • 大小: 33.1 KB
分享到:
评论
1 楼 demoxshiroki 2015-03-18  
总结的不错

相关推荐

    ThreadPoolExecutor运转机制介绍

    ### ThreadPoolExecutor 运转机制详解 #### 一、ThreadPoolExecutor 的基本概念与构造函数解析 在Java并发编程中,`ThreadPoolExecutor` 是一种强大的工具,它可以帮助开发者有效地管理和执行线程。`...

    线程池之ThreadPoolExecutor.docx

    线程池的工作机制在于控制线程数量,它会将任务放入队列,然后根据线程池的设定创建并启动线程执行这些任务。如果线程数量超过最大限制,额外的任务会被排队等待,直到有线程完成任务释放资源。线程池的使用有三个...

    Java并发编程之ThreadPoolExecutor详解与实战

    内容概要:本篇文章深入探讨了Java中多线程管理的一个关键组件——ThreadPoolExecutor的工作机制及其优化策略。主要涵盖ThreadPoolExecutor的基础概念介绍,创建配置参数的意义与选择方法,以及在实际编程中的几种...

    JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用

    该类提供了一个灵活的线程池管理机制,允许开发者根据需要创建和管理线程池。ThreadPoolExecutor类的构造方法为: ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...

    java ThreadPoolExecutor 并发调用实例详解

    在这些机制中,ThreadPoolExecutor 是一个非常重要的概念,它提供了一个线程池,允许开发者将任务提交到线程池中,并行地执行这些任务。 ThreadPoolExecutor 的主要作用是管理一个线程池,线程池中包含多个线程,每...

    ThreadPoolExecutor线程池的使用方法

    ThreadPoolExecutor线程池提供了灵活的线程管理机制,可以根据需要选择合适的任务队列和拒绝策略,并且可以自定义线程工厂和线程工具类,从而满足不同应用场景的需求。 ThreadPoolExecutor的使用方法可以分为以下几...

    JDK之ThreadPoolExecutor源码分析1

    ThreadPoolExecutor作为Java中的线程池实现,其内部机制相当复杂且灵活。本文将深入解析ThreadPoolExecutor的execute()方法执行流程,以帮助我们理解线程池的工作原理。 当一个任务被提交到线程池,线程池的执行...

    使用线程池ThreadPoolExecutor 抓取论坛帖子列表

    在IT行业中,线程池是多线程编程中一个重要的概念,它可以帮助我们高效地管理和控制并发执行的任务。...通过深入理解线程池的工作机制和源码,我们可以更好地设计和优化我们的并发程序,实现高效的数据抓取。

    线程池ThreadPoolExecutor原理源码分析.md

    本文将围绕 `ThreadPoolExecutor` 的核心方法 `execute()` 进行深入解析,帮助读者更好地理解其内部机制。 #### 二、构造方法 `ThreadPoolExecutor` 提供了一个构造函数,用于初始化线程池: ```java public ...

    说说你对ThreadPoolExecutor的理解.docx

    总的来说,ThreadPoolExecutor提供了一种高效、灵活的线程管理机制,可以控制并发程度,避免资源浪费,同时能优雅地处理任务提交和执行过程中的各种情况。理解和熟练使用ThreadPoolExecutor对于编写高性能的多线程...

    java 中ThreadPoolExecutor原理分析

    ThreadPoolExecutor 是 Java 并发编程中的一种高级线程池实现,它提供了一个灵活的线程池管理机制,允许开发者根据需要配置线程池的参数以满足不同的需求。在这篇文章中,我们将深入探讨 ThreadPoolExecutor 的原理...

    12-线程池ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf

    通过上述对`ThreadPoolExecutor`线程池底层实现原理的解析,我们可以看到Java线程池的强大之处在于其高效的状态管理和任务调度机制。通过对`ctl`变量的巧妙利用,线程池能够有效地管理线程状态和数量,从而实现高...

    11-线程池ThreadPoolExecutor底层原理源码分析(上)-周瑜.pdf

    根据提供的文件信息,我们...通过上面的介绍,我们可以了解到`ThreadPoolExecutor`在Java并发编程中的重要性和其内部机制。合理配置线程池不仅可以提高系统的响应速度,还可以有效利用系统资源,减少不必要的资源浪费。

    Java线程池ThreadPoolExecutor原理及使用实例

    Java线程池ThreadPoolExecutor是Java并发编程中的一种基本机制,主要用于管理和执行任务的线程池。下面对其原理和使用实例进行详细介绍。 线程池概述 线程池是一个池子,负责管理和执行任务的线程。当用户提交任务...

    试析Android异步通信机制.pdf

    在Android应用开发中,异步通信机制扮演着至关重要的角色,它使得应用程序可以在不阻塞用户界面的情况下执行耗时操作,如网络请求、数据库查询或大型数据处理。本篇分析将深入探讨Android异步通信的几种主要实现方式...

    java线程池和反射机制例子

    Java中,`java.util.concurrent`包下的`ExecutorService`接口和`ThreadPoolExecutor`类提供了线程池的相关功能。我们可以自定义线程池的大小、工作队列、拒绝策略等参数,以适应不同的并发需求。例如,通过`...

    顶层接口Executors详解

    顶层接口Executors详解 Executors框架是Java语言中用于异步执行任务的高级接口,...ThreadPoolExecutor提供了一个灵活的线程池管理机制,可以根据系统的负荷情况动态地调整线程池的大小,提高系统的性能和可扩展性。

    android学习笔记之消息机制,异步和多线程[参考].pdf

    对于更复杂的多线程需求,可以使用`ThreadPoolExecutor`来创建和管理线程池,从而更好地控制线程的数量和生命周期。线程池可以有效利用系统资源,减少频繁创建和销毁线程的开销。此外,`IntentService`是一种单线程...

    Android线程间 massage 机制

    为了提高性能,可以使用AsyncTask、IntentService或ThreadPoolExecutor等其他并发工具。对于耗时操作,推荐在工作线程中执行,通过Handler向主线程发送更新UI的消息,避免主线程阻塞。 总的来说,理解并熟练运用...

Global site tag (gtag.js) - Google Analytics