`

java 线程池的理解(ThreadPoolExecutor)

    博客分类:
  • Java
阅读更多

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue workQueue,
                              RejectedExecutionHandler handler)

corePoolSize:控制单次并行线程最小数;

workQueue:缓存待运行线程(线程数量 n);

maximumPoolSize:workQueue队列已满,外部依然在添加线程,则生成新的线程将直接运行,可执行线程数量为 maximumPoolSize-corePoolSize;如果外部还在继续添加线程,则这些新线程被直接抛弃。。。

keepAliveTime:控制空闲线程闲置时长『实际是针对corePoolSize的线程闲置时间的控制,所以说线程重用应该是针对第一批启动线程』

workQueue:ArrayBlockingQueue,DelayedWorkQueue,DelayQueue,LinkedBlockingQueue,

PriorityBlockingQueue,SynchronousQueue

handler:RejectedExecutionHandler 四种方式

             其中 DiscardPolicy  表示拒绝任务但不做任何动作;

             DiscardOldestPolicy 表示先抛弃队列中等待最久的闲置线程,取最新加入队列的线程运行,有点像FIFO

CallerRunsPolicy  如果线程池内活动线程数达到maximumPoolSize,如果此时还有并发任务数还在迅速增大,线程池会使用调用者的线程执行任务,如果有执行时间很长的任务并发,要慎用该策略

补充:
java线程池(java.util.concurrent.ThreadPoolExecutor)及其策略的使用一点提醒

例如我们并发任务数是100

_executor = new ThreadPoolExecutor(2, 50, 1, TimeUnit.SECONDS,
                                           new LinkedBlockingQueue<Runnable>(), new ThreadPoolExecutor.DiscardOldestPolicy());

上面例子中使用了无界队列,将会把任务都执行完,但是任务调度花费的时间会长

_executor = new ThreadPoolExecutor(2, 50, 1, TimeUnit.SECONDS,
                                           new LinkedBlockingQueue<Runnable>(30), new ThreadPoolExecutor.DiscardOldestPolicy());

上面例子中使用了有界队列,任务只能执行80个,有20个被抛弃,任务调度时间很快

如果将最大线程数和队列最大有限容量的和设置为大于或等于100,任务可以执行完,任务调度时间很快,任务调度时间有二个值影响:

corePoolSize: 线程池维护线程的最少数量
maximumPoolSize:线程池维护线程的最大数量
corePoolSize起决定作用,maximumPoolSize其次

如果使用有界队列,DiscardOldestPolicy策略使用时候需要注意的是maximumPoolSize和队列容量之和要不小于最大并发数,否则当任务并发数达到最大时你的任务可能被丢弃。

 

分享到:
评论

相关推荐

    Java线程池与ThreadPoolExecutor.pdf

    Java线程池是Java并发编程中...总结来说,理解并正确使用Java线程池和ThreadPoolExecutor对于优化Java应用程序的并发性能至关重要。通过调整线程池的参数,可以平衡资源利用率和系统响应时间,从而提高整体的系统效率。

    深入理解Java线程池:ThreadPoolExecutor _ Idea Buffer1

    1. RUNNING :能接受新提交的任务,并且也能处理阻塞队列中的任务 2. SHUTDOWN:关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已保

    java线程池封装j

    Java线程池是一种高效管理线程的技术,它允许开发者预定义一组线程,根据任务的需要灵活调度,而不是每次需要执行任务时都创建新的线程。这种设计模式大大提高了系统的性能,减少了系统资源的消耗,特别是在高并发...

    java线程池对象ThreadPoolExecutor的深入讲解

    Java线程池是一种高效管理线程资源的工具,它的核心组件是`ThreadPoolExecutor`类,它在Java的`java.util.concurrent`包中。线程池的使用能够显著提高应用程序的性能和响应速度,同时减少系统资源的浪费。下面将详细...

    java线程池实例详细讲解

    总之,Java线程池是实现多线程并行处理的关键工具,理解和熟练使用它可以显著提高程序的并发性能,降低系统的资源消耗。通过深入学习和实践,我们可以更好地利用线程池来优化我们的Java应用程序。

    java线程池threadpool简单使用源码

    要理解`java线程池threadpool简单使用源码`,你需要查看`src`目录下的Java文件,了解如何实例化`ThreadPoolExecutor`,设置相关参数,以及如何提交任务到线程池。同时,查看源码中对`ThreadGroup`的使用,理解它如何...

    java线程池的源码分析.zip

    首先,我们要理解Java线程池的核心类`java.util.concurrent.ThreadPoolExecutor`,它是所有自定义线程池的基类。线程池通过维护一个工作线程集合来管理任务的执行,避免了频繁创建和销毁线程的开销,提高了系统的...

    Java线程池文档

    Java线程池是一种高效管理线程的机制,它允许开发者预先设定线程的数量,并通过池化的方式重用已创建的线程,以提高系统性能,减少线程的创建和销毁开销。线程池在Java中是通过`java.util.concurrent`包下的`...

    java线程池实例

    Java线程池是一种高效管理线程资源的工具,它通过维护一组可重用的线程来减少创建和销毁线程的开销。在Java中,`java.util.concurrent`包提供了`ExecutorService`接口和它的实现类,如`ThreadPoolExecutor`,来支持...

    Java 线程池的原理与实现

    理解Java线程池的原理和实现,可以帮助我们更有效地管理并发任务,提升系统性能,同时避免资源浪费和线程安全问题。在实际开发中,合理配置线程池参数,结合业务场景选择合适的线程池类型,是优化系统性能的关键步骤...

    java 线程池实现多并发队列后进先出

    Java线程池是一种高效管理并发任务的机制,它允许开发者预先配置一定数量的线程,以便在处理多个并发任务时能有效地复用这些线程,从而避免了频繁创建和销毁线程带来的开销。在Java中,`java.util.concurrent`包下的...

    JAVA线程池的原理与实现.pdf

    Java线程池是一种高效利用系统资源、管理并发执行任务的机制。...总的来说,理解Java线程池的工作原理和实现对于优化并发应用程序至关重要,它可以帮助我们更好地控制系统的并发度,提高系统的响应速度和资源利用率。

    java 四种线程池实例

    总之,Java线程池提供了一种强大的工具来管理和优化并发任务的执行,理解并熟练使用各种线程池实例能够显著提升程序的效率和可维护性。在设计系统时,应该充分考虑线程池的选择和配置,以适应不同类型的异步任务需求...

    JAVA线程池例子

    Java线程池是一种高效管理线程资源的技术,它允许开发者创建一组可重用的工作线程,从而避免频繁地创建和销毁线程带来的性能开销。线程池在Java中主要通过`java.util.concurrent`包中的`ExecutorService`接口及其...

    Java线程池及观察者模式解决多线程意外死亡重启问题

    Java线程池是Java并发编程中的重要组成部分,它允许开发者高效地管理多个并发执行的线程,有效地控制系统的资源消耗,提高系统性能和稳定性。在Java中,`java.util.concurrent`包提供了`ExecutorService`接口及其...

    JAVA使用线程池查询大批量数据

    除了`ThreadPoolExecutor`,Java还提供了`Executors`工具类,它提供了一些预设的线程池配置,如`newFixedThreadPool`(固定大小线程池)、`newSingleThreadExecutor`(单线程线程池)等,方便开发者快速创建线程池。...

    Java线程池.pdf

    ### Java线程池详解 #### 引言 在现代计算机科学中,线程作为轻量级的进程,已经成为操作系统和应用程序提高并发性、优化资源...理解和掌握Java线程池的原理和使用方法,对于开发高性能、高可靠的Java应用至关重要。

    50879510A6_Java线程池_funbde_

    `ThreadPoolExecutor`是Java线程池的核心实现类,它的构造函数接受多个参数,用于定制线程池的行为: 1. corePoolSize:核心线程数,线程池会尽量保持这个数量的线程活跃,即使它们空闲。 2. maximumPoolSize:最大...

    java线程池和反射机制例子

    首先,让我们深入理解Java线程池。线程池是一种多线程处理形式,预先创建了一组线程,当任务到来时,可以立即从池中取出一个线程来执行任务,完成后再放回线程池,而不是每次创建新的线程。这极大地提高了系统的效率...

    自定义实现Java线程池1-模拟jdk线程池执行流程1

    【自定义Java线程池实现】 在Java编程中,线程池是一种高效管理线程资源的方式,可以提高系统的性能和响应速度。本篇将探讨如何模拟Java的JDK线程池执行流程,以理解其设计原理。核心知识点包括线程池的执行策略、...

Global site tag (gtag.js) - Google Analytics