Эй, вот интересный вопрос. Я использую в своем проекте Android множество операций sql с sqlite. По этому вопросу я использую пул потоков для повторного использования существующих ресурсов. Пул потоков выглядеть как это:Android с использованием нескольких threadpoolexecutors
final int NUMBER_OF_CORES = Runtime.getRuntime().availableProcessors();
ThreadPoolExecutor threadPoolExecutor= new ThreadPoolExecutor(NUMBER_OF_CORES*2,NUMBER_OF_CORES*2,1L, TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(12,true),new PriorityThreadFactory(Process.THREAD_PRIORITY_BACKGROUND),new RejectedThread(context));
public class PriorityThreadFactory implements ThreadFactory {
private final int mThreadPriority;
public PriorityThreadFactory(int threadPriority) {
mThreadPriority = threadPriority;
}
@Override
public Thread newThread(final Runnable runnable) {
Runnable wrapperRunnable = new Runnable() {
@Override
public void run() {
try {
android.os.Process.setThreadPriority(mThreadPriority);
} catch (Throwable t) {
}
runnable.run();
}
};
return new Thread(wrapperRunnable);
}
}
public class RejectedThread implements RejectedExecutionHandler {
MyLogger myLogger;
public RejectedThread(Context context) {
this.myLogger=new MyLogger(RejectedThread.class.getSimpleName(), context);
}
@Override
public void rejectedExecution(Runnable worker, ThreadPoolExecutor executor) {
this.myLogger.info("Execution rejected for: "+worker.toString());
}
}
А также я создаю новый Runnable для каждого CRUD (Create-Read-Update-Delete) операция, которую я делаю в базе данных (выполняется с помощью пула потоков выше) , Вот вопросы, помимо threadpool для операций sql, мне понадобится еще один пул потоков для выполнения операций регистрации, чтобы регистрировать поведение системы для остальных моих функций, которые я делаю. Есть ли способ предотвратить раздачу/(недостаточные ресурсы), потому что я использую два или более исполнителей пула потоков (выделенные разделенные, используя в разных целях и никогда выполнение исполнителя пула потоков в другом исполнителе пула потоков)?
Это все кажется излишним. Зачем вам нужен пул потоков для операций регистрации? Также почему вы не можете использовать существующего исполнителя из класса AsyncTask? У вас есть проблемы с этим? – Okas
не все операции 'CRUD' будут синхронизированы в любом случае? –
[Okas] Все эти журналы отправляются службе, поэтому эта операция всегда находится в фоновом режиме. Я пытаюсь выполнить что-то вроде: Firebase Crash Reporting (https://firebase.google.com/docs/crash/), но используя мой единственный персональный сервер и с меньшими функциональными возможностями. –