public interface Pool
extends Executor, AutoCloseable
A managed thread pool for parallel and concurrent operations.
Pool extends Executor so it can be used anywhere an
executor is expected — including AsyncScope.withScope.
It also implements AutoCloseable for use in try-with-resources
blocks, ensuring clean shutdown.
Factory methods provide common pool configurations:
availableProcessors(), for CPU-bound work
Inspired by GPars' PGroup pool management, modernised for
virtual threads.
try (var pool = Pool.cpu()) {
AsyncScope.withScope(pool, scope -> {
scope.async(() -> cpuIntensiveWork());
scope.async(() -> moreCpuWork());
return null;
);
}
}
| Type Params | Return Type | Name and description |
|---|---|---|
|
public ForkJoinPool |
asForkJoinPool()Returns the underlying ForkJoinPool, if this pool is backed by one. |
|
public void |
close()Shuts down the pool. |
|
public static Pool |
cpu()Creates a pool sized to Runtime.availableProcessors(),
suitable for CPU-bound work. |
|
public static Pool |
current()Returns the pool bound to the current scope, or null. |
|
public static Pool |
fixed(int size)Creates a fixed-size thread pool with daemon threads. |
|
public int |
getActiveCount()Returns the approximate number of threads actively executing tasks. |
|
public int |
getPoolSize()Returns the configured pool size. |
|
public static Pool |
io()Creates a larger pool suitable for I/O-bound or blocking operations. |
|
public void |
shutdown()Initiates an orderly shutdown. |
|
public boolean |
usesVirtualThreads()Returns true if this pool uses virtual threads. |
|
public static Pool |
virtual()Creates a virtual-thread-per-task pool (JDK 21+). |
<T> |
public static T |
withCurrent(Pool pool, Supplier<T> supplier)Executes the supplier with the given pool as current, restoring the previous binding afterwards. |
| Methods inherited from class | Name |
|---|---|
interface Executor |
execute |
interface AutoCloseable |
close |
Returns the underlying ForkJoinPool, if this pool is backed by one. Required for parallel stream isolation.
Shuts down the pool. Equivalent to shutdown().
Creates a pool sized to Runtime.availableProcessors(),
suitable for CPU-bound work.
Returns the pool bound to the current scope, or null.
Set by ParallelScope.withPool using the runtime's scoped binding support.
null if none is boundCreates a fixed-size thread pool with daemon threads.
size - the number of threads (must be > 0)Returns the approximate number of threads actively executing tasks.
Returns the configured pool size.
For virtual thread pools, returns Integer.MAX_VALUE.
Creates a larger pool suitable for I/O-bound or blocking operations.
If virtual threads are available, returns a virtual thread pool (the ideal choice for I/O). Otherwise returns a fixed pool sized to ConcurrentConfig.getDefaultParallelism.
Initiates an orderly shutdown. Previously submitted tasks are executed, but no new tasks will be accepted.
Returns true if this pool uses virtual threads.
Creates a virtual-thread-per-task pool (JDK 21+).
Each submitted task runs on its own virtual thread. This is ideal for I/O-bound workloads where tasks spend time waiting. On JDK versions that do not support virtual threads, falls back to a cached daemon thread pool.
Executes the supplier with the given pool as current, restoring the previous binding afterwards.
pool - the pool to bindsupplier - the work to executeT - the result type