public abstract class Schedulers extends Object
Schedulers
provides various Scheduler
factories useable by publishOn
or subscribeOn
:
fromExecutorService(ExecutorService)
}. newParallel(java.lang.String)
: Optimized for fast Runnable
executions single()
: Optimized
for low-latency Runnable
executions immediate()
.
Factories prefixed with new
return a new instance of their flavor of Scheduler
,
while other factories like elastic()
return a shared instance, that is the one
used by operators requiring that flavor as their default Scheduler.
Modifier and Type | Class and Description |
---|---|
static interface |
Schedulers.Factory
Public factory hook to override Schedulers behavior globally
|
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_POOL_SIZE
Default pool size, initialized to the number of processors available to the runtime
on init (but with a minimum value of 4).
|
Constructor and Description |
---|
Schedulers() |
Modifier and Type | Method and Description |
---|---|
static Scheduler |
elastic()
Scheduler that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down. |
static Scheduler |
fromExecutor(Executor executor)
|
static Scheduler |
fromExecutor(Executor executor,
boolean trampoline)
|
static Scheduler |
fromExecutorService(ExecutorService executorService)
Create a
Scheduler which uses a backing ExecutorService to schedule
Runnables for async operators. |
static Scheduler |
immediate()
Executes tasks on the caller's thread immediately.
|
static boolean |
isInNonBlockingThread()
Check if calling a Reactor blocking API in the current
Thread is forbidden
or not, by checking if the thread implements NonBlocking (in which case it is
forbidden and this method returns true ). |
static boolean |
isNonBlockingThread(Thread t)
Check if calling a Reactor blocking API in the given
Thread is forbidden
or not, by checking if the thread implements NonBlocking (in which case it is
forbidden and this method returns true ). |
static Scheduler |
newElastic(int ttlSeconds,
ThreadFactory threadFactory)
Scheduler that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down. |
static Scheduler |
newElastic(String name)
Scheduler that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down. |
static Scheduler |
newElastic(String name,
int ttlSeconds)
Scheduler that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down. |
static Scheduler |
newElastic(String name,
int ttlSeconds,
boolean daemon)
Scheduler that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down. |
static Scheduler |
newParallel(int parallelism,
ThreadFactory threadFactory)
Scheduler that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work. |
static Scheduler |
newParallel(String name)
Scheduler that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work. |
static Scheduler |
newParallel(String name,
int parallelism)
Scheduler that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work. |
static Scheduler |
newParallel(String name,
int parallelism,
boolean daemon)
Scheduler that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work. |
static Scheduler |
newSingle(String name)
Scheduler that hosts a single-threaded ExecutorService-based worker and is
suited for parallel work. |
static Scheduler |
newSingle(String name,
boolean daemon)
Scheduler that hosts a single-threaded ExecutorService-based worker and is
suited for parallel work. |
static Scheduler |
newSingle(ThreadFactory threadFactory)
Scheduler that hosts a single-threaded ExecutorService-based worker and is
suited for parallel work. |
static void |
onHandleError(BiConsumer<Thread,? super Throwable> c)
Define a hook that is executed when a
Scheduler has
handled an error . |
static Scheduler |
parallel()
Scheduler that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work. |
static void |
resetFactory()
Re-apply default factory to
Schedulers |
static void |
resetOnHandleError()
Reset the
onHandleError(BiConsumer) hook to the default no-op behavior. |
static void |
setFactory(Schedulers.Factory factoryInstance)
|
static void |
shutdownNow()
Clear any cached
Scheduler and call dispose on them. |
static Scheduler |
single()
Scheduler that hosts a single-threaded ExecutorService-based worker and is
suited for parallel work. |
static Scheduler |
single(Scheduler original)
Wraps a single
Scheduler.Worker from some other
Scheduler and provides Scheduler.Worker
services on top of it. |
public static final int DEFAULT_POOL_SIZE
Runtime.availableProcessors()
public static Scheduler fromExecutorService(ExecutorService executorService)
Scheduler
which uses a backing ExecutorService
to schedule
Runnables for async operators.executorService
- an ExecutorService
Scheduler
public static Scheduler elastic()
Scheduler
that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down.
The maximum number of created thread pools is unbounded.
The default time-to-live for unused thread pools is 60 seconds, use the appropriate factory to set a different value.
This scheduler is not restartable.
Scheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workers and is suited for parallel workpublic static Scheduler parallel()
Scheduler
that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work.Scheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workerspublic static Scheduler immediate()
Scheduler
public static Scheduler newElastic(String name)
Scheduler
that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down.
The maximum number of created thread pools is unbounded.
The default time-to-live for unused thread pools is 60 seconds, use the appropriate factory to set a different value.
This scheduler is not restartable.
name
- Thread prefixScheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workers and is suited for parallel workpublic static Scheduler newElastic(String name, int ttlSeconds)
Scheduler
that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down.
The maximum number of created thread pools is unbounded.
This scheduler is not restartable.
name
- Thread prefixttlSeconds
- Time-to-live for an idle Scheduler.Worker
Scheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workers and is suited for parallel workpublic static Scheduler newElastic(String name, int ttlSeconds, boolean daemon)
Scheduler
that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down.
The maximum number of created thread pools is unbounded.
This scheduler is not restartable.
name
- Thread prefixttlSeconds
- Time-to-live for an idle Scheduler.Worker
daemon
- false if the Scheduler
requires an explicit Scheduler.dispose()
to exit the VM.Scheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workers and is suited for parallel workpublic static Scheduler newElastic(int ttlSeconds, ThreadFactory threadFactory)
Scheduler
that dynamically creates ExecutorService-based Workers and caches
the thread pools, reusing them once the Workers have been shut down.
The maximum number of created thread pools is unbounded.
This scheduler is not restartable.
ttlSeconds
- Time-to-live for an idle Scheduler.Worker
threadFactory
- a ThreadFactory
to use each thread initializationScheduler
that dynamically creates ExecutorService-based
Workers and caches the thread pools, reusing them once the Workers have been shut
down.public static Scheduler newParallel(String name)
Scheduler
that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work. This type of Scheduler
detects and
rejects usage of blocking Reactor APIs.name
- Thread prefixScheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workers and is suited for parallel workpublic static Scheduler newParallel(String name, int parallelism)
Scheduler
that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work. This type of Scheduler
detects and
rejects usage of blocking Reactor APIs.name
- Thread prefixparallelism
- Number of pooled workers.Scheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workers and is suited for parallel workpublic static Scheduler newParallel(String name, int parallelism, boolean daemon)
Scheduler
that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work. This type of Scheduler
detects and
rejects usage of blocking Reactor APIs.name
- Thread prefixparallelism
- Number of pooled workers.daemon
- false if the Scheduler
requires an explicit Scheduler.dispose()
to exit the VM.Scheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workers and is suited for parallel workpublic static Scheduler newParallel(int parallelism, ThreadFactory threadFactory)
Scheduler
that hosts a fixed pool of single-threaded ExecutorService-based
workers and is suited for parallel work.parallelism
- Number of pooled workers.threadFactory
- a ThreadFactory
to use for the fixed initialized
number of Thread
Scheduler
that hosts a fixed pool of single-threaded
ExecutorService-based workers and is suited for parallel workpublic static Scheduler newSingle(String name)
Scheduler
that hosts a single-threaded ExecutorService-based worker and is
suited for parallel work. This type of Scheduler
detects and rejects usage
* of blocking Reactor APIs.name
- Component and thread name prefixScheduler
that hosts a single-threaded ExecutorService-based
workerpublic static Scheduler newSingle(String name, boolean daemon)
Scheduler
that hosts a single-threaded ExecutorService-based worker and is
suited for parallel work. This type of Scheduler
detects and rejects usage
of blocking Reactor APIs.name
- Component and thread name prefixdaemon
- false if the Scheduler
requires an explicit Scheduler.dispose()
to exit the VM.Scheduler
that hosts a single-threaded ExecutorService-based
workerpublic static Scheduler newSingle(ThreadFactory threadFactory)
Scheduler
that hosts a single-threaded ExecutorService-based worker and is
suited for parallel work.threadFactory
- a ThreadFactory
to use for the unique thread of the
Scheduler
Scheduler
that hosts a single-threaded ExecutorService-based
workerpublic static void onHandleError(BiConsumer<Thread,? super Throwable> c)
Scheduler
has
handled an error
. Note that it is executed after
the error has been passed to the thread uncaughtErrorHandler, which is not the
case when a fatal error occurs (see Exceptions.throwIfJvmFatal(Throwable)
).c
- the new hook to set.public static boolean isInNonBlockingThread()
Thread
is forbidden
or not, by checking if the thread implements NonBlocking
(in which case it is
forbidden and this method returns true
).true
if blocking is forbidden in this thread, false
otherwisepublic static boolean isNonBlockingThread(Thread t)
Thread
is forbidden
or not, by checking if the thread implements NonBlocking
(in which case it is
forbidden and this method returns true
).true
if blocking is forbidden in that thread, false
otherwisepublic static void resetFactory()
Schedulers
public static void resetOnHandleError()
onHandleError(BiConsumer)
hook to the default no-op behavior.public static void setFactory(Schedulers.Factory factoryInstance)
Schedulers
factories (newParallel
,
newSingle
and newElastic
). Also
shutdown Schedulers from the cached factories (like single()
) in order to
also use these replacements, re-creating the shared schedulers from the new factory
upon next use.
This method should be called safely and with caution, typically on app startup.
factoryInstance
- an arbitrary Schedulers.Factory
instance.public static void shutdownNow()
Scheduler
and call dispose on them.public static Scheduler single()
Scheduler
that hosts a single-threaded ExecutorService-based worker and is
suited for parallel work. Will cache the returned schedulers for subsequent calls until dispose.Scheduler
that hosts a single-threaded
ExecutorService-based workerpublic static Scheduler single(Scheduler original)
Scheduler.Worker
from some other
Scheduler
and provides Scheduler.Worker
services on top of it.
Use the Scheduler.dispose()
to release the wrapped worker.
original
- a Scheduler
to call upon to get the single Scheduler.Worker
Scheduler
consistently returning a same worker from a
source Scheduler