package com.novoda.downloadmanager.lib;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
class DownloadExecutorFactory {
private static final int KEEP_ALIVE_TIME = 10;
private final ConcurrentDownloadsLimitProvider concurrentDownloadsLimitProvider;
DownloadExecutorFactory(ConcurrentDownloadsLimitProvider concurrentDownloadsLimitProvider) {
this.concurrentDownloadsLimitProvider = concurrentDownloadsLimitProvider;
}
public ThreadPoolExecutor createExecutor() {
int maxConcurrentDownloads = concurrentDownloadsLimitProvider.getConcurrentDownloadsLimit();
ThreadPoolExecutor executor = new ThreadPoolExecutor(
maxConcurrentDownloads,
maxConcurrentDownloads,
KEEP_ALIVE_TIME,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>());
executor.allowCoreThreadTimeOut(true);
return executor;
}
}