Merge pull request #39 from m2049r/bugfix_issue_36
Use AsyncTask with 5MB stack in lots of placesupstream
commit
5b3e92e91a
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017 m2049r
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.m2049r.xmrwallet.util;
|
||||||
|
|
||||||
|
import com.m2049r.xmrwallet.service.MoneroHandlerThread;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
public class MoneroThreadPoolExecutor {
|
||||||
|
private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
|
||||||
|
private static final int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));
|
||||||
|
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;
|
||||||
|
private static final int KEEP_ALIVE_SECONDS = 30;
|
||||||
|
|
||||||
|
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
|
||||||
|
private final AtomicInteger mCount = new AtomicInteger(1);
|
||||||
|
|
||||||
|
public Thread newThread(Runnable r) {
|
||||||
|
return new Thread(null, r, "MoneroTask #" + mCount.getAndIncrement(), MoneroHandlerThread.THREAD_STACK_SIZE);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private static final BlockingQueue<Runnable> sPoolWorkQueue =
|
||||||
|
new LinkedBlockingQueue<>(128);
|
||||||
|
|
||||||
|
public static final Executor MONERO_THREAD_POOL_EXECUTOR;
|
||||||
|
|
||||||
|
static {
|
||||||
|
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
|
||||||
|
CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_SECONDS, TimeUnit.SECONDS,
|
||||||
|
sPoolWorkQueue, sThreadFactory);
|
||||||
|
threadPoolExecutor.allowCoreThreadTimeOut(true);
|
||||||
|
MONERO_THREAD_POOL_EXECUTOR = threadPoolExecutor;
|
||||||
|
}
|
||||||
|
}
|
Reference in new issue