Top Description Inners Fields Constructors Methods
io.reactivex.internal.schedulers

public final Class ComputationScheduler

extends Scheduler
implements SchedulerMultiWorkerSupport
Class Inheritance
All Implemented Interfaces
io.reactivex.internal.schedulers.SchedulerMultiWorkerSupport
Imports
java.util.concurrent.*, java.util.concurrent.atomic.AtomicReference, io.reactivex.Scheduler, io.reactivex.annotations.NonNull, io.reactivex.disposables.*, io.reactivex.internal.disposables.*, io.reactivex.internal.functions.ObjectHelper

Holds a fixed pool of worker threads and assigns them to requested Scheduler.Workers in a round-robin fashion.

Nested and Inner Type Summary

Modifier and TypeClass and Description
pack-priv static class
pack-priv static class
pack-priv static class

Field Summary

Modifier and TypeField and Description
private static final String
KEY_COMPUTATION_PRIORITY

The name of the system property for setting the thread priority for this Scheduler.

pack-priv static final String
KEY_MAX_THREADS

Key to setting the maximum number of computation scheduler threads.

pack-priv static final int
MAX_THREADS

The maximum number of computation scheduler threads.

pack-priv static final ComputationScheduler.FixedSchedulerPool
NONE

This will indicate no pool is active.

pack-priv final AtomicReference<ComputationScheduler.FixedSchedulerPool>
pack-priv static final ComputationScheduler.PoolWorker
pack-priv static final RxThreadFactory
private static final String
THREAD_NAME_PREFIX

Manages a fixed number of workers.

pack-priv final ThreadFactory

Constructor Summary

AccessConstructor and Description
public
ComputationScheduler()

Create a scheduler with pool size equal to the available processor count and using least-recent worker selection policy.

public
ComputationScheduler(ThreadFactory
thread factory to use for creating worker threads. Note that this takes precedence over any system properties for configuring new thread creation. Cannot be null.
threadFactory
)

Create a scheduler with pool size equal to the available processor count and using least-recent worker selection policy.

Method Summary

Modifier and TypeMethod and Description
pack-priv static int
cap(int cpuCount, int paramThreads)

public Scheduler.Worker
createWorker()

Implements abstract io.reactivex.Scheduler.createWorker.

Retrieves or creates a new Scheduler.Worker that represents sequential execution of actions.
public void
createWorkers(int
the number of workers to create, positive
number
,
SchedulerMultiWorkerSupport.WorkerCallback
the callback to send worker instances to
callback
)

Implements io.reactivex.internal.schedulers.SchedulerMultiWorkerSupport.createWorkers.

Creates the given number of io.reactivex.Scheduler.Worker instances that are possibly backed by distinct threads and calls the specified Consumer with them.
public Disposable
scheduleDirect(Runnable
the task to schedule
run
,
long
the delay amount, non-positive values indicate non-delayed scheduling
delay
,
TimeUnit
the unit of measure of the delay amount
unit
)

Overrides io.reactivex.Scheduler.scheduleDirect.

Schedules the execution of the given task with the given time delay.
public Disposable
schedulePeriodicallyDirect(Runnable
the task to schedule
run
,
long
the initial delay amount, non-positive values indicate non-delayed scheduling
initialDelay
,
long
the period at which the task should be re-executed
period
,
TimeUnit
the unit of measure of the delay amount
unit
)

Overrides io.reactivex.Scheduler.schedulePeriodicallyDirect.

Schedules a periodic execution of the given task with the given initial time delay and repeat period.
public void
shutdown()

Overrides io.reactivex.Scheduler.shutdown.

Instructs the Scheduler instance to stop threads, stop accepting tasks on any outstanding Worker instances and clean up any associated resources with this Scheduler.
public void
start()

Overrides io.reactivex.Scheduler.start.

Allows the Scheduler instance to start threads and accept tasks on them.
Inherited from io.reactivex.Scheduler:
clockDriftTolerancenowscheduleDirectwhen

Field Detail

KEY_COMPUTATION_PRIORITYback to summary
private static final String KEY_COMPUTATION_PRIORITY

The name of the system property for setting the thread priority for this Scheduler.

KEY_MAX_THREADSback to summary
pack-priv static final String KEY_MAX_THREADS

Key to setting the maximum number of computation scheduler threads. Zero or less is interpreted as use available. Capped by available.

MAX_THREADSback to summary
pack-priv static final int MAX_THREADS

The maximum number of computation scheduler threads.

NONEback to summary
pack-priv static final ComputationScheduler.FixedSchedulerPool NONE

This will indicate no pool is active.

poolback to summary
pack-priv final AtomicReference<ComputationScheduler.FixedSchedulerPool> pool
SHUTDOWN_WORKERback to summary
pack-priv static final ComputationScheduler.PoolWorker SHUTDOWN_WORKER
THREAD_FACTORYback to summary
pack-priv static final RxThreadFactory THREAD_FACTORY
THREAD_NAME_PREFIXback to summary
private static final String THREAD_NAME_PREFIX

Manages a fixed number of workers.

threadFactoryback to summary
pack-priv final ThreadFactory threadFactory

Constructor Detail

ComputationSchedulerback to summary
public ComputationScheduler()

Create a scheduler with pool size equal to the available processor count and using least-recent worker selection policy.

ComputationSchedulerback to summary
public ComputationScheduler(ThreadFactory threadFactory)

Create a scheduler with pool size equal to the available processor count and using least-recent worker selection policy.

Parameters
threadFactory:ThreadFactory

thread factory to use for creating worker threads. Note that this takes precedence over any system properties for configuring new thread creation. Cannot be null.

Method Detail

capback to summary
pack-priv static int cap(int cpuCount, int paramThreads)
createWorkerback to summary
public Scheduler.Worker createWorker()

Implements abstract io.reactivex.Scheduler.createWorker.

Doc from io.reactivex.Scheduler.createWorker.

Retrieves or creates a new Scheduler.Worker that represents sequential execution of actions.

When work is completed, the Worker instance should be released by calling Scheduler.Worker#dispose() to avoid potential resource leaks in the underlying task-execution scheme.

Work on a Scheduler.Worker is guaranteed to be sequential and non-overlapping.

Returns:Scheduler.Worker

a Worker representing a serial queue of actions to be executed

Annotations
@NonNull
@Override
createWorkersback to summary
public void createWorkers(int number, SchedulerMultiWorkerSupport.WorkerCallback callback)

Implements io.reactivex.internal.schedulers.SchedulerMultiWorkerSupport.createWorkers.

Doc from io.reactivex.internal.schedulers.SchedulerMultiWorkerSupport.createWorkers.

Creates the given number of io.reactivex.Scheduler.Worker instances that are possibly backed by distinct threads and calls the specified Consumer with them.

Parameters
number:int

the number of workers to create, positive

callback:SchedulerMultiWorkerSupport.WorkerCallback

the callback to send worker instances to

Annotations
@Override
scheduleDirectback to summary
public Disposable scheduleDirect(Runnable run, long delay, TimeUnit unit)

Overrides io.reactivex.Scheduler.scheduleDirect.

Doc from io.reactivex.Scheduler.scheduleDirect.

Schedules the execution of the given task with the given time delay.

This method is safe to be called from multiple threads but there are no ordering guarantees between tasks.

Parameters
run:Runnable

the task to schedule

delay:long

the delay amount, non-positive values indicate non-delayed scheduling

unit:TimeUnit

the unit of measure of the delay amount

Returns:Disposable

the Disposable that let's one cancel this particular delayed task.

Annotations
@NonNull
@Override
schedulePeriodicallyDirectback to summary
public Disposable schedulePeriodicallyDirect(Runnable run, long initialDelay, long period, TimeUnit unit)

Overrides io.reactivex.Scheduler.schedulePeriodicallyDirect.

Doc from io.reactivex.Scheduler.schedulePeriodicallyDirect.

Schedules a periodic execution of the given task with the given initial time delay and repeat period.

This method is safe to be called from multiple threads but there are no ordering guarantees between tasks.

The periodic execution is at a fixed rate, that is, the first execution will be after the initialDelay, the second after initialDelay + period, the third after initialDelay + 2 * period, and so on.

Parameters
run:Runnable

the task to schedule

initialDelay:long

the initial delay amount, non-positive values indicate non-delayed scheduling

period:long

the period at which the task should be re-executed

unit:TimeUnit

the unit of measure of the delay amount

Returns:Disposable

the Disposable that let's one cancel this particular delayed task.

Annotations
@NonNull
@Override
shutdownback to summary
public void shutdown()

Overrides io.reactivex.Scheduler.shutdown.

Doc from io.reactivex.Scheduler.shutdown.

Instructs the Scheduler instance to stop threads, stop accepting tasks on any outstanding Worker instances and clean up any associated resources with this Scheduler.

Implementations should make sure the call is idempotent, thread-safe and should not throw any RuntimeException if it doesn't support this functionality.

Annotations
@Override
startback to summary
public void start()

Overrides io.reactivex.Scheduler.start.

Doc from io.reactivex.Scheduler.start.

Allows the Scheduler instance to start threads and accept tasks on them.

Implementations should make sure the call is idempotent, thread-safe and should not throw any RuntimeException if it doesn't support this functionality.

Annotations
@Override
io.reactivex.internal.schedulers back to summary

pack-priv final Class ComputationScheduler.EventLoopWorker

extends Worker
Class Inheritance

Field Summary

Modifier and TypeField and Description
private final ListCompositeDisposable
pack-priv volatile boolean
private final ComputationScheduler.PoolWorker
private final ListCompositeDisposable
private final CompositeDisposable

Constructor Summary

AccessConstructor and Description
pack-priv

Method Summary

Modifier and TypeMethod and Description
public void
dispose()

Implements io.reactivex.disposables.Disposable.dispose.

Dispose the resource, the operation should be idempotent.
public boolean
isDisposed()

Implements io.reactivex.disposables.Disposable.isDisposed.

Returns true if this resource has been disposed.
public Disposable
schedule(Runnable
Runnable to schedule
action
)

Overrides io.reactivex.Scheduler.Worker.schedule.

Schedules a Runnable for execution without any time delay.
public Disposable
schedule(Runnable
the Runnable to schedule
action
,
long
time to "wait" before executing the action; non-positive values indicate an non-delayed schedule
delayTime
,
TimeUnit
the time unit of delayTime
unit
)

Implements abstract io.reactivex.Scheduler.Worker.schedule.

Schedules an Runnable for execution at some point in the future specified by a time delay relative to the current time.
Inherited from io.reactivex.Scheduler.Worker:
nowschedulePeriodically

Field Detail

bothback to summary
private final ListCompositeDisposable both
disposedback to summary
pack-priv volatile boolean disposed
poolWorkerback to summary
private final ComputationScheduler.PoolWorker poolWorker
serialback to summary
private final ListCompositeDisposable serial
timedback to summary
private final CompositeDisposable timed

Constructor Detail

EventLoopWorkerback to summary
pack-priv EventLoopWorker(ComputationScheduler.PoolWorker poolWorker)

Method Detail

disposeback to summary
public void dispose()

Implements io.reactivex.disposables.Disposable.dispose.

Doc from io.reactivex.disposables.Disposable.dispose.

Dispose the resource, the operation should be idempotent.

Annotations
@Override
isDisposedback to summary
public boolean isDisposed()

Implements io.reactivex.disposables.Disposable.isDisposed.

Doc from io.reactivex.disposables.Disposable.isDisposed.

Returns true if this resource has been disposed.

Returns:boolean

true if this resource has been disposed

Annotations
@Override
scheduleback to summary
public Disposable schedule(Runnable action)

Overrides io.reactivex.Scheduler.Worker.schedule.

Doc from io.reactivex.Scheduler.Worker.schedule.

Schedules a Runnable for execution without any time delay.

The default implementation delegates to schedule(Runnable, long, TimeUnit).

Parameters
action:Runnable

Runnable to schedule

Returns:Disposable

a Disposable to be able to unsubscribe the action (cancel it if not executed)

Annotations
@NonNull
@Override
scheduleback to summary
public Disposable schedule(Runnable action, long delayTime, TimeUnit unit)

Implements abstract io.reactivex.Scheduler.Worker.schedule.

Doc from io.reactivex.Scheduler.Worker.schedule.

Schedules an Runnable for execution at some point in the future specified by a time delay relative to the current time.

Note to implementors: non-positive delayTime should be regarded as non-delayed schedule, i.e., as if the schedule(Runnable) was called.

Parameters
action:Runnable

the Runnable to schedule

delayTime:long

time to "wait" before executing the action; non-positive values indicate an non-delayed schedule

unit:TimeUnit

the time unit of delayTime

Returns:Disposable

a Disposable to be able to unsubscribe the action (cancel it if not executed)

Annotations
@NonNull
@Override
io.reactivex.internal.schedulers back to summary

pack-priv final Class ComputationScheduler.FixedSchedulerPool

extends Object
implements SchedulerMultiWorkerSupport
Class Inheritance
  • java.lang.Object
  • io.reactivex.internal.schedulers.ComputationScheduler.FixedSchedulerPool
All Implemented Interfaces
io.reactivex.internal.schedulers.SchedulerMultiWorkerSupport

Field Summary

Modifier and TypeField and Description
pack-priv final int
pack-priv final ComputationScheduler.PoolWorker[]
pack-priv long
n

Constructor Summary

AccessConstructor and Description
pack-priv
FixedSchedulerPool(int maxThreads, ThreadFactory threadFactory)

Method Summary

Modifier and TypeMethod and Description
public void
createWorkers(int
the number of workers to create, positive
number
,
SchedulerMultiWorkerSupport.WorkerCallback
the callback to send worker instances to
callback
)

Implements io.reactivex.internal.schedulers.SchedulerMultiWorkerSupport.createWorkers.

Creates the given number of io.reactivex.Scheduler.Worker instances that are possibly backed by distinct threads and calls the specified Consumer with them.
public ComputationScheduler.PoolWorker
public void
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

coresback to summary
pack-priv final int cores
eventLoopsback to summary
pack-priv final ComputationScheduler.PoolWorker[] eventLoops
nback to summary
pack-priv long n

Constructor Detail

FixedSchedulerPoolback to summary
pack-priv FixedSchedulerPool(int maxThreads, ThreadFactory threadFactory)

Method Detail

createWorkersback to summary
public void createWorkers(int number, SchedulerMultiWorkerSupport.WorkerCallback callback)

Implements io.reactivex.internal.schedulers.SchedulerMultiWorkerSupport.createWorkers.

Doc from io.reactivex.internal.schedulers.SchedulerMultiWorkerSupport.createWorkers.

Creates the given number of io.reactivex.Scheduler.Worker instances that are possibly backed by distinct threads and calls the specified Consumer with them.

Parameters
number:int

the number of workers to create, positive

callback:SchedulerMultiWorkerSupport.WorkerCallback

the callback to send worker instances to

Annotations
@Override
getEventLoopback to summary
public ComputationScheduler.PoolWorker getEventLoop()
shutdownback to summary
public void shutdown()
io.reactivex.internal.schedulers back to summary

pack-priv final Class ComputationScheduler.PoolWorker

extends NewThreadWorker
Class Inheritance

Field Summary

Inherited from io.reactivex.internal.schedulers.NewThreadWorker:
disposed

Constructor Summary

AccessConstructor and Description
pack-priv
PoolWorker(ThreadFactory threadFactory)

Method Summary

Inherited from io.reactivex.internal.schedulers.NewThreadWorker:
disposeisDisposedscheduleschedulescheduleActualscheduleDirectschedulePeriodicallyDirectshutdown

Constructor Detail

PoolWorkerback to summary
pack-priv PoolWorker(ThreadFactory threadFactory)