package com.code44.finance.api;
import android.os.Process;
import android.support.annotation.NonNull;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class NetworkExecutor extends ThreadPoolExecutor {
private static NetworkExecutor singleton;
public NetworkExecutor(int maxThreads) {
super(0, maxThreads, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(), new NetworkThreadFactory());
}
public static synchronized NetworkExecutor get() {
if (singleton == null) {
final int numberCores = Runtime.getRuntime().availableProcessors();
singleton = new NetworkExecutor(numberCores * 2 + 1);
}
return singleton;
}
private static class NetworkThreadFactory implements ThreadFactory {
@Override public Thread newThread(@NonNull Runnable runnable) {
return new NetworkThread(runnable);
}
}
private static class NetworkThread extends Thread {
private NetworkThread(Runnable runnable) {
super(runnable);
}
@Override public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
super.run();
}
}
}