corepoolsize和maxpoolsize
时间: 2023-05-04 15:00:21 浏览: 94
b'corepoolsize'和b'maxpoolsize'是Java中线程池的两个参数。b'corepoolsize'指的是线程池中核心线程的数量,b'maxpoolsize'指的是线程池中最大可创建的线程数量。当线程池中的线程数量达到b'corepoolsize'时,新的任务将被放入等待队列中。当等待队列已满时,线程池将创建新的线程,直到线程数达到b'maxpoolsize'。需要注意的是,b'corepoolsize'默认情况下是0,而b'maxpoolsize'默认情况下是Integer.MAX_VALUE。
相关问题
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 的线程池。你可以将这个线程池用于你的服务器程序中。
int corePoolSize = 2; int maxPoolSize = 5; long keepAliveSeconds = 5; BlockingQueue workQueue = new ArrayBlockingQueue(4); AtomicInteger threadId = new AtomicInteger(1); ThreadFactory factory = runnable -> new Thread(runnable, "thread-" + threadId.getAndIncrement()); ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveSeconds, TimeUnit.SECONDS, workQueue, factory); for (int i= 0 ; i< 10 ; i++ ) { int finalI = i; executor.submit(() -> { try { Thread.sleep(1000); } catch (InterruptedException ignored) { } System.out.println(Thread.currentThread().getName() + ":" + i); }); }
这段代码创建了一个线程池,其中包含2个初始线程,最多可扩展到5个线程。使用ArrayBlockingQueue作为工作队列,大小为4。使用AtomicInteger生成线程名称,并使用ThreadFactory创建新线程。创建了一个ThreadPoolExecutor实例,并将其用于提交10个任务。每个任务都会休眠1秒钟,然后将当前线程的名称和任务号打印到控制台。由于线程池中仅有2个初始线程,因此前2个任务将被立即执行。随着新任务的到来,线程池将创建更多线程。如果任务数量超过了工作队列的大小,那么新任务将被拒绝。在所有任务完成之后,线程池将等待5秒钟,然后关闭所有线程。
阅读全文