先贴出一个创建线程池的实例:
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class ThreadPoolDemo { private ThreadPoolExecutor threadPool = null ; public ThreadPoolDemo(){ threadPool = new ThreadPoolExecutor(5, 10, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>() , new ThreadNameFactory("myThread", false) , new MyAbortPolicy("ThreadName")) ; } }
import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; public class ThreadNameFactory implements ThreadFactory{ private static AtomicInteger curThre = new AtomicInteger(1) ; private AtomicInteger threadNum = new AtomicInteger(1); private String namePre ; private boolean isW ; private final ThreadGroup mGroup; public ThreadNameFactory(String namePre , boolean isW){ this.namePre = namePre +"-"+curThre.getAndIncrement() ; this.isW = isW ; SecurityManager sys = System.getSecurityManager() ; mGroup = ( sys == null ) ? Thread.currentThread().getThreadGroup() : sys.getThreadGroup(); } @Override public Thread newThread(Runnable arg0) { Thread thread = new Thread(mGroup , this.namePre+"-"+threadNum.getAndIncrement() ); thread.setDaemon(isW); return thread; } }
import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor.AbortPolicy; public class MyAbortPolicy extends AbortPolicy{ private String runName ; public MyAbortPolicy(String runName){ this.runName = runName ; } @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { String msg = String.format("Thread pool is EXHAUSTED!" + " Thread Name: %s, Pool Size: %d (active: %d, core: %d, max: %d, largest: %d), Task: %d (completed: %d)," + " Executor status:(isShutdown:%s, isTerminated:%s, isTerminating:%s)" , runName, e.getPoolSize(), e.getActiveCount(), e.getCorePoolSize(), e.getMaximumPoolSize(), e.getLargestPoolSize(), e.getTaskCount(), e.getCompletedTaskCount(), e.isShutdown(), e.isTerminated(), e.isTerminating()); throw new RejectedExecutionException(msg); } }
构造方法:
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory , RejectedExecutionHandler handler) { this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), handler); }
参数解释:
corePoolSize: 核心线程数,会一直存活,即使没有任务,线程池也会维护线程的最少数量
maximumPoolSize: 线程池维护线程的最大数量
keepAliveTime: 线程池维护线程所允许的空闲时间,当线程空闲时间达到keepAliveTime,该线程会退出,直到线程数量等于corePoolSize。如果allowCoreThreadTimeout设置为true,则所有线程均会退出直到线程数量为0。
unit:线程池维护线程所允许的空闲时间的单位、可选参数值为:TimeUnit中的几个静态属性:NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。
workQueue:线程池所使用的缓冲队列,常用的是:java.util.concurrent.ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue
handler:线程池中的数量大于maximumPoolSize,对拒绝任务的处理策略,默认值ThreadPoolExecutor.AbortPolicy()。
threadFactory :线程生成工厂
相关推荐
创建线程池使用`ThreadPoolExecutor`构造函数,其参数含义如下: - `corePoolSize`: 核心线程数,表示线程池中保持的最小线程数。 - `maximumPoolSize`: 最大线程数,定义了线程池允许的最大并发线程数。 - `...
1. 创建线程池:创建一个 ThreadPoolExecutor 实例,并设置其核心参数,例如 corePoolSize、maxPoolSize 和 keep-alive time。 2. 提交任务:提交一个任务给线程池,任务将被加入到线程池的队列中。 3. 执行任务:当...
线程池通过ThreadPoolExecutor类实现,这是一个高度可配置的工具,能够根据具体需求定制线程的创建、管理和销毁策略。 ThreadPoolExecutor的核心参数包括: 1. corePoolSize:核心线程数,这是线程池在非繁忙状态下...
Python线程池模块`ThreadPoolExecutor`是Python标准库`concurrent.futures`的一部分,它提供了一种方便且高效的方式来管理线程,以便并发地执行多个任务。线程池的概念允许我们预先创建一组线程,然后根据需要分配...
而线程池不允许使用Executors去创建,而要通过ThreadPoolExecutor方式,这一方面是由于jdk中Executor框架虽然提供了如newFixedThreadPool()、newSingleThreadExecutor()、newCachedThreadPool()等创建线程池的方法,...
### 线程池 `ThreadPoolExecutor` 原理源码分析 #### 一、概述 线程池作为 Java 并发编程中的重要组件,在实际应用中被广泛使用。其核心类 `ThreadPoolExecutor` 实现了对线程的管理、调度等功能。本文将围绕 `...
线程池是由一组预先创建的线程组成的,这些线程可以复用,而不是每次执行任务时都创建新的线程。`ThreadPoolExecutor`是Java并发包`java.util.concurrent`中的核心类,用于实现线程池服务。通过设置线程池参数,我们...
`ThreadPoolExecutor`是Java中非常重要的一个类,它用于创建线程池。线程池可以重用一组预先创建好的线程来执行任务,从而减少了创建和销毁线程所带来的开销,同时也能够控制运行的线程数量,避免由于过多的线程导致...
Java线程池是一种高效管理线程资源的工具,它的核心组件是`ThreadPoolExecutor`类,它在Java的`java.util.concurrent`包中。线程池的使用能够显著提高应用程序的性能和响应速度,同时减少系统资源的浪费。下面将详细...
`ThreadPoolExecutor`是Java中用于创建和管理线程池的重要类。它提供了许多核心属性和方法来控制线程池的行为。 #### 1.1 `ctl`变量 线程池内部维护了一个`AtomicInteger`类型的变量`ctl`,该变量用于表示线程池的...
如果线程池中的线程数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,那么ThreadPoolExecutor会创建新的线程来处理任务。如果线程池中的线程数量大于corePoolSize,缓冲队列...
这个类是Spring对Java内置的`java.util.concurrent.ThreadPoolExecutor`的封装,允许开发者在Spring应用上下文中声明式地定义线程池。在本篇文章中,我们将深入探讨`ThreadPoolTaskExecutor`的配置及其使用,并结合`...
使用ThreadPoolExecutor类可以创建一个线程池,线程池可以维护一定数量的线程,用于执行任务。任务可以通过execute(Runnable)方法被添加到线程池,任务就是一个Runnable类型的对象,任务的执行方法就是Runnable类型...
Java线程池ThreadPoolExecutor原理及使用实例 Java线程池ThreadPoolExecutor是Java并发编程中的一种基本机制,主要用于管理和执行任务的线程池。下面对其原理和使用实例进行详细介绍。 线程池概述 线程池是一个...
ThreadPoolExecutor是Java中的一种线程池实现,它可以帮助我们管理线程资源,避免创建和销毁线程所带来的性能开销。它提供了诸如线程池大小、队列大小、线程存活时间等参数,可以根据实际情况进行配置。 二、...
1. 创建线程池:使用ThreadPoolExecutor类创建线程池,设置线程池的核心线程数、最大线程数和keepAliveTime等参数。 2. 提交任务:将任务提交给线程池,线程池会自动选择空闲线程执行任务。 3. 监控线程池:使用...
Android之线程池ThreadPoolExecutor的简介 Android之线程池ThreadPoolExecutor是Android中一个非常重要的组件,它解决了单线程下载数据的效率慢和线程阻塞的问题。ThreadPoolExecutor的应用也是优化实现的方式,它...
Java线程池创建过程详解 Java中的线程池是指一组可以复用的线程集合,这些线程可以执行不同的任务,而不是每次都创建新的线程。线程池的好处是可以提高系统的并发性能和可扩展性。 Java中提供了一个名为Executor...
下面是一个基本的创建ThreadPoolExecutor的例子: ```java int corePoolSize = 5; // 核心线程数 int maximumPoolSize = 10; // 最大线程数 long keepAliveTime = 60L; // 空闲线程存活时间 TimeUnit unit = ...