A ThreadPool
is an ExecutorService
that executes each submitted task using one of possibly several pooled threads, normally configured using Executors factory methods.
Here is a basic code to initialize a new ThreadPool as a singleton to use in your app:
public final class ThreadPool {
private static final String TAG = "ThreadPool";
private static final int CORE_POOL_SIZE = 4;
private static final int MAX_POOL_SIZE = 8;
private static final int KEEP_ALIVE_TIME = 10; // 10 seconds
private final Executor mExecutor;
private static ThreadPool sThreadPoolInstance;
private ThreadPool() {
mExecutor = new ThreadPoolExecutor(
CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
}
public void execute(Runnable runnable) {
mExecutor.execute(runnable);
}
public synchronized static ThreadPool getThreadPoolInstance() {
if (sThreadPoolInstance == null) {
Log.i(TAG, "[getThreadManagerInstance] New Instance");
sThreadPoolInstance = new ThreadPool();
}
return sThreadPoolInstance;
}
}
You have two ways to call your runnable method, use execute()
or submit()
. the difference between them is that submit()
returns a Future
object which allows you a way to programatically cancel the running thread when the object T is returned from the Callable
callback. You can read more about Future
here