ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 20, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
时间: 2023-11-22 09:46:21 浏览: 65
ThreadPoolExecutor是Java中的一个线程池实现类,它可以用来管理和调度多个线程。在创建ThreadPoolExecutor时,需要指定一些参数,例如核心线程数、最大线程数、线程空闲时间等。其中,核心线程数是指线程池中一直存在的线程数量,最大线程数是指线程池中最多可以存在的线程数量。当线程池中的线程数量超过核心线程数时,新的任务会被放入阻塞队列中等待执行。如果阻塞队列已满,且线程池中的线程数量还没有达到最大线程数,那么会创建新的线程来执行任务。如果线程池中的线程数量已经达到最大线程数,那么新的任务会被拒绝执行。
在这个例子中,创建了一个ThreadPoolExecutor对象,它有10个核心线程,最多可以存在20个线程,线程空闲时间为60秒,任务队列使用的是LinkedBlockingQueue。这个线程池可以用来执行多个任务,当任务数量超过核心线程数时,新的任务会被放入任务队列中等待执行。如果任务队列已满,且线程池中的线程数量还没有达到最大线程数,那么会创建新的线程来执行任务。如果线程池中的线程数量已经达到最大线程数,那么新的任务会被拒绝执行。
相关问题
package com.automic.swp.irri.api.utils; import java.util.concurrent.*; /** * 创建服务器线程池 * * @author zhengzhuanzi <url>http://www.z3pipe.com</url> */ public class ThreadPoolUtil { private ThreadPoolUtil() { } /** * make server thread pool * * @param serverType 服务器类型 * @return */ public static ThreadPoolExecutor makeServerThreadPool(final String serverType) { //系统处理器核数 int corePoolSize = Runtime.getRuntime().availableProcessors(); return makeServerThreadPool(serverType, corePoolSize, corePoolSize * 4); } /** * make server thread pool * * @param serverType 服务器类型 * @return */ public static ThreadPoolExecutor makeServerThreadPool(final String serverType, int corePoolSize, int maxPoolSize) { return makeServerThreadPool(serverType, corePoolSize, maxPoolSize, 60, 1000); } /** * make server thread pool * * @param serverType 服务器类型 * @return */ public static ThreadPoolExecutor makeServerThreadPool(final String serverType, int corePoolSize, int maxPoolSize, long keepAliveTime, int capacity) { ThreadFactory threadFactory = new ThreadFactory() { @Override public Thread newThread(Runnable r) { return new Thread(r, serverType + "-serverHandlerPool-" + r.hashCode()); } }; RejectedExecutionHandler rejectedExecutionHandler = new RejectedExecutionHandler() { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { throw new RuntimeException("" + serverType + " Thread pool is EXHAUSTED!"); } }; return new ThreadPoolExecutor( corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS, new LinkedBlockingQueue<>(capacity), threadFactory , rejectedExecutionHandler ); } }解释一下这个类教我怎么用
这个类提供了一个静态方法 `makeServerThreadPool`,它可以用来创建一个服务器线程池。你可以通过传入不同的参数来定制线程池的大小和其他属性。
如果你只想使用默认的参数,可以直接调用不带参数的 `makeServerThreadPool` 方法。如果你想自定义线程池的大小等属性,可以调用带参数的 `makeServerThreadPool` 方法,并传入对应的参数值。
例如,要创建一个名为 `myServer` 的服务器线程池,可以这样使用:
```java
ThreadPoolExecutor threadPool = ThreadPoolUtil.makeServerThreadPool("myServer", 10, 20, 120, 200);
```
这将创建一个核心线程数为 10,最大线程数为 20,线程空闲时间为 120 秒,任务队列容量为 200 的线程池。你可以将这个线程池用于你的服务器程序中。
ThreadPoolExecutor executor =
ThreadPoolExecutor 是 Java 中用于线程池管理的一个核心类,它允许你在程序中创建一组工作线程,以便管理和调度执行任务。它的基本构造包括以下几个关键部分:
1. 工作线程数(corePoolSize):这是线程池默认启动的线程数量,它们始终在线运行。
2. 最大线程数(maximumPoolSize):当任务提交的速度超过核心线程处理能力时,线程池会自动增加额外的工作线程,直到达到这个最大值。
3. 阻塞队列(workQueue):用于存储等待执行的任务。如果所有线程都在忙,新任务将进入阻塞队列。
4. 空闲线程策略(keepAliveTime):当工作队列为空且所有核心线程都处于活动状态时,多余的非核心线程会在指定时间内等待新任务的到来,否则会被终止。
5. 守护线程(allowCoreThreadTimeOut):设置为 true 时,主线程退出时会尝试停止所有核心线程。
6. 提交任务的拒绝策略(handler):当工作队列已满且无法接受新任务时,可以配置不同的策略如直接丢弃、循环等待等。
通过 ThreadPoolExecutor,你可以有效地控制并发任务的数量,避免资源耗尽,并且实现任务的异步执行。例如,创建一个线程池并提交任务的代码可能会像下面这样:
```java
int corePoolSize = 5;
int maxPoolSize = 10;
long keepAliveTime = 60; // 单位为秒
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maxPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy()
);
executor.execute(yourRunnableTask); // 提交任务
```
阅读全文