# IdlingScheduledThreadPoolExecutor

Artifact: [androidx.test.espresso.idling:idling-concurrent](https://developer.android.com/jetpack/androidx/releases/test-espresso-idling) [View Source](https://cs.android.com/search?q=file:androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor.java+class:androidx.test.espresso.idling.concurrent.IdlingScheduledThreadPoolExecutor)

*** ** * ** ***

<br />

```
public class IdlingScheduledThreadPoolExecutor extends ScheduledThreadPoolExecutor implements IdlingResource
```

<br />

|---|---|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||||
| ↳ | [java.util.concurrent.AbstractExecutorService](https://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html) ||||
|   | ↳ | [java.util.concurrent.ThreadPoolExecutor](https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html) |||
|   |   | ↳ | [java.util.concurrent.ScheduledThreadPoolExecutor](https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html) ||
|   |   |   | ↳ | [androidx.test.espresso.idling.concurrent.IdlingScheduledThreadPoolExecutor](https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor) |

*** ** * ** ***

A `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html` that can be registered as an `https://developer.android.com/reference/androidx/test/espresso/IdlingResource` with Espresso.

Overrides parent methods to monitor threads starting, and finishing execution. Uses `https://developer.android.com/reference/androidx/test/espresso/idling/CountingIdlingResource` to track number of active tasks.

## Summary

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#IdlingScheduledThreadPoolExecutor(java.lang.String,int,java.util.concurrent.ThreadFactory)( https://developer.android.com/reference/java/lang/String.html resourceName, int corePoolSize, https://developer.android.com/reference/java/util/concurrent/ThreadFactory.html threadFactory )` Creates a new `IdlingScheduledThreadPoolExecutor` with the given initial parameters. |
| `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#IdlingScheduledThreadPoolExecutor(java.lang.String,int,java.util.concurrent.ThreadFactory,boolean)( https://developer.android.com/reference/java/lang/String.html resourceName, int corePoolSize, https://developer.android.com/reference/java/util/concurrent/ThreadFactory.html threadFactory, boolean debugCounting )` Creates a new `IdlingScheduledThreadPoolExecutor` with the given initial parameters. |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#getName()()` Returns the name of the resources (used for logging and idempotency of registration). |
| `boolean` | `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#isIdleNow()()` Returns `true` if resource is currently idle. |
| `void` | `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#registerIdleTransitionCallback(androidx.test.espresso.IdlingResource.ResourceCallback)( https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback callback )` Registers the given `https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback` with the resource. |
| `https://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html<V>` | `<V> https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#schedule(java.util.concurrent.Callable<V>,long,java.util.concurrent.TimeUnit)(https://developer.android.com/reference/java/util/concurrent/Callable.html<V> callable, long delay, https://developer.android.com/reference/java/util/concurrent/TimeUnit.html unit)` |
| `https://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull ?>` | `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#schedule(java.lang.Runnable,long,java.util.concurrent.TimeUnit)(https://developer.android.com/reference/java/lang/Runnable.html command, long delay, https://developer.android.com/reference/java/util/concurrent/TimeUnit.html unit)` |

| ### Protected methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#afterExecute(java.lang.Runnable,java.lang.Throwable)(https://developer.android.com/reference/java/lang/Runnable.html r, https://developer.android.com/reference/java/lang/Throwable.html t)` |
| `void` | `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#beforeExecute(java.lang.Thread,java.lang.Runnable)(https://developer.android.com/reference/java/lang/Thread.html t, https://developer.android.com/reference/java/lang/Runnable.html r)` |
| `void` | `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor#terminated()()` |

### Inherited methods

From [java.util.concurrent.AbstractExecutorService](https://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html) `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/java/util/concurrent/Future.html<T>>` `<T> https://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html#invokeAll(java.util.Collection&lt;? extends java.util.concurrent.Callable&lt;T&gt;&gt;)(https://developer.android.com/reference/java/util/Collection.html<https://developer.android.com/reference/java/util/concurrent/Callable.html<T>> tasks)` `T` `<T> https://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html#invokeAny(java.util.Collection&lt;? extends java.util.concurrent.Callable&lt;T&gt;&gt;)(https://developer.android.com/reference/java/util/Collection.html<https://developer.android.com/reference/java/util/concurrent/Callable.html<T>> tasks)` `https://developer.android.com/reference/java/util/concurrent/RunnableFuture.html<T>` `<T> https://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html#newTaskFor(java.lang.Runnable, T)(https://developer.android.com/reference/java/lang/Runnable.html runnable, T value)` From [java.util.concurrent.ExecutorService](https://developer.android.com/reference/java/util/concurrent/ExecutorService.html) `void` `https://developer.android.com/reference/java/util/concurrent/ExecutorService.html#close()()` From [java.util.concurrent.ScheduledThreadPoolExecutor](https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html) `https://developer.android.com/reference/java/util/concurrent/RunnableScheduledFuture.html<V>` `<V> https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#decorateTask(java.lang.Runnable, java.util.concurrent.RunnableScheduledFuture&lt;V&gt;)(https://developer.android.com/reference/java/lang/Runnable.html runnable, https://developer.android.com/reference/java/util/concurrent/RunnableScheduledFuture.html<V> task)` `void` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#execute(java.lang.Runnable)(https://developer.android.com/reference/java/lang/Runnable.html command)` `boolean` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#getContinueExistingPeriodicTasksAfterShutdownPolicy()()` `boolean` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#getExecuteExistingDelayedTasksAfterShutdownPolicy()()` `https://developer.android.com/reference/java/util/concurrent/BlockingQueue.html<https://developer.android.com/reference/java/lang/Runnable.html>` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#getQueue()()` `boolean` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#getRemoveOnCancelPolicy()()` `https://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull ?>` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit)(

https://developer.android.com/reference/java/lang/Runnable.html command,

long initialDelay,

long period,

https://developer.android.com/reference/java/util/concurrent/TimeUnit.html unit

)` `https://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html<@https://developer.android.com/reference/androidx/annotation/NonNull ?>` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit)(

https://developer.android.com/reference/java/lang/Runnable.html command,

long initialDelay,

long delay,

https://developer.android.com/reference/java/util/concurrent/TimeUnit.html unit

)` `void` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean)(boolean value)` `void` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean)(boolean value)` `void` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#setRemoveOnCancelPolicy(boolean)(boolean value)` `void` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#shutdown()()` `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/java/lang/Runnable.html>` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#shutdownNow()()` `https://developer.android.com/reference/java/util/concurrent/Future.html<@https://developer.android.com/reference/androidx/annotation/NonNull ?>` `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#submit(java.lang.Runnable)(https://developer.android.com/reference/java/lang/Runnable.html task)` `https://developer.android.com/reference/java/util/concurrent/Future.html<T>` `<T> https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html#submit(java.lang.Runnable, T)(https://developer.android.com/reference/java/lang/Runnable.html task, T result)` From [java.util.concurrent.ThreadPoolExecutor](https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html) `void` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#allowCoreThreadTimeOut(boolean)(boolean value)` `boolean` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#allowsCoreThreadTimeOut()()` `boolean` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#awaitTermination(long, java.util.concurrent.TimeUnit)(long timeout, https://developer.android.com/reference/java/util/concurrent/TimeUnit.html unit)` `void` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#finalize()()`

**This method is deprecated.**
`int` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getActiveCount()()` `long` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getCompletedTaskCount()()` `int` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getCorePoolSize()()` `long` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getKeepAliveTime(java.util.concurrent.TimeUnit)(https://developer.android.com/reference/java/util/concurrent/TimeUnit.html unit)` `int` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getLargestPoolSize()()` `int` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getMaximumPoolSize()()` `int` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getPoolSize()()` `https://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getRejectedExecutionHandler()()` `long` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getTaskCount()()` `https://developer.android.com/reference/java/util/concurrent/ThreadFactory.html` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#getThreadFactory()()` `boolean` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#isShutdown()()` `boolean` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#isTerminated()()` `boolean` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#isTerminating()()` `int` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#prestartAllCoreThreads()()` `boolean` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#prestartCoreThread()()` `void` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#purge()()` `boolean` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#remove(java.lang.Runnable)(https://developer.android.com/reference/java/lang/Runnable.html task)` `void` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#setCorePoolSize(int)(int corePoolSize)` `void` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#setKeepAliveTime(long, java.util.concurrent.TimeUnit)(long time, https://developer.android.com/reference/java/util/concurrent/TimeUnit.html unit)` `void` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#setMaximumPoolSize(int)(int maximumPoolSize)` `void` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#setRejectedExecutionHandler(java.util.concurrent.RejectedExecutionHandler)(https://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html handler)` `void` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#setThreadFactory(java.util.concurrent.ThreadFactory)(https://developer.android.com/reference/java/util/concurrent/ThreadFactory.html threadFactory)` `https://developer.android.com/reference/java/lang/String.html` `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html#toString()()`

## Public constructors

### IdlingScheduledThreadPoolExecutor

```
public IdlingScheduledThreadPoolExecutor(
    String resourceName,
    int corePoolSize,
    ThreadFactory threadFactory
)
```

Creates a new `IdlingScheduledThreadPoolExecutor` with the given initial parameters.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html resourceName` | the name of the executor (used for logging and idempotency of registration). |
| `int corePoolSize` | the number of threads to keep in the pool, even if they are idle, unless allowCoreThreadTimeOut is set. |
| `https://developer.android.com/reference/java/util/concurrent/ThreadFactory.html threadFactory` | the factory to use when the executor creates a new thread. |

### IdlingScheduledThreadPoolExecutor

```
public IdlingScheduledThreadPoolExecutor(
    String resourceName,
    int corePoolSize,
    ThreadFactory threadFactory,
    boolean debugCounting
)
```

Creates a new `IdlingScheduledThreadPoolExecutor` with the given initial parameters.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html resourceName` | the name of the executor (used for logging and idempotency of registration). |
| `int corePoolSize` | the number of threads to keep in the pool, even if they are idle, unless allowCoreThreadTimeOut is set. |
| `https://developer.android.com/reference/java/util/concurrent/ThreadFactory.html threadFactory` | the factory to use when the executor creates a new thread. |
| `boolean debugCounting` | if true increment \&decrement calls will print trace information to logs. |

## Public methods

### getName

```
public String getName()
```

Returns the name of the resources (used for logging and idempotency of registration).

### isIdleNow

```
public boolean isIdleNow()
```

Returns `true` if resource is currently idle. Espresso will **always** call this method from the main thread, therefore it should be non-blocking and return immediately.

### registerIdleTransitionCallback

```
public void registerIdleTransitionCallback(
    IdlingResource.ResourceCallback callback
)
```

Registers the given `https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback` with the resource. Espresso will call this method:

- with its implementation of `https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback` so it can be notified asynchronously that your resource is idle
- from the main thread, but you are free to execute the callback's onTransitionToIdle from any thread
- once (when it is initially given a reference to your IdlingResource)

You only need to call this upon transition from busy to idle - if the resource is already idle when the method is called invoking the call back is optional and has no significant impact.

### schedule

```
public ScheduledFuture<V> <V> schedule(Callable<V> callable, long delay, TimeUnit unit)
```

### schedule

```
public ScheduledFuture<@NonNull ?> schedule(Runnable command, long delay, TimeUnit unit)
```

## Protected methods

### afterExecute

```
protected void afterExecute(Runnable r, Throwable t)
```

### beforeExecute

```
protected void beforeExecute(Thread t, Runnable r)
```

### terminated

```
protected void terminated()
```