package vandy.mooc.utils.loader;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Custom Thread Pool used to load the images in the background.
*/
public class ImageLoaderThreadPool {
private static final int CORE_POOL_SIZE = 20;
private static final int MAXIMUM_POOL_SIZE = 256;
private static final int KEEP_ALIVE = 1;
/**
* The ThreadFactory that is used to create new
* threads when needed.
*/
private static final ThreadFactory sThreadFactory =
new ThreadFactory() {
private final AtomicInteger mCount =
new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #"
+ mCount.getAndIncrement());
}
};
/**
* Queue of tasks to execute
*/
private static final BlockingQueue<Runnable> sPoolWorkQueue =
new LinkedBlockingQueue<Runnable>(MAXIMUM_POOL_SIZE);
/**
* An {@link Executor} that can be used to execute tasks in
* parallel.
*/
public static final Executor MY_THREAD_POOL_EXECUTOR =
new ThreadPoolExecutor(CORE_POOL_SIZE,
MAXIMUM_POOL_SIZE,
KEEP_ALIVE,
TimeUnit.SECONDS,
sPoolWorkQueue,
sThreadFactory);
}