Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ThreadPoolExecutor中使用堆栈而不是队列_Java_Android_Multithreading_Threadpoolexecutor - Fatal编程技术网

Java 在ThreadPoolExecutor中使用堆栈而不是队列

Java 在ThreadPoolExecutor中使用堆栈而不是队列,java,android,multithreading,threadpoolexecutor,Java,Android,Multithreading,Threadpoolexecutor,我正在开发一个android项目,我想实现一个简单的下载程序。因此,我使用一个线程池,其实现如下 private static final int MAX_QUEUE_SIZE = 200; private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); private static final int CORE_POOL_SIZE = CPU_COUNT; private static fina

我正在开发一个android项目,我想实现一个简单的下载程序。因此,我使用一个线程池,其实现如下

private static final int MAX_QUEUE_SIZE = 200;

private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
private static final int CORE_POOL_SIZE = CPU_COUNT;
private static final int MAXIMUM_POOL_SIZE = CPU_COUNT;
private static final int KEEP_ALIVE = 10;
private static final BlockingQueue<Runnable> postThreadQueue = new LinkedBlockingQueue<>(MAX_QUEUE_SIZE);


private ThreadPool()
{
    super(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS, postThreadQueue, postThreadFactory);
}

private static final ThreadFactory postThreadFactory = new ThreadFactory()
{
    private final AtomicInteger counter = new AtomicInteger(1);

    public Thread newThread(Runnable runnable)
    {
        return new Thread(runnable, "Post AsyncTask #" + counter.getAndIncrement());
    }
};
private static final int MAX_QUEUE_SIZE=200;
私有静态最终int CPU_计数=Runtime.getRuntime().availableProcessors();
私有静态最终整数核心池大小=CPU计数;
私有静态最终整数最大池大小=CPU计数;
私有静态final int KEEP_ALIVE=10;
私有静态最终阻塞队列postThreadQueue=新的LinkedBlockingQueue(最大队列大小);
私有线程池()
{
超级(核心池大小、最大池大小、保持活动状态、TimeUnit.SECONDS、postThreadQueue、postThreadFactory);
}
私有静态最终ThreadFactory postThreadFactory=新ThreadFactory()
{
私有最终AtomicInteger计数器=新的AtomicInteger(1);
公共线程newThread(Runnable-Runnable)
{
返回新线程(可运行,“Post AsyncTask#”+counter.getAndIncrement());
}
};
而且效果很好。问题是ThreadPoolExecuter使用队列,所以上次下载的执行时间太长,但我需要更快地执行它们(上次下载的优先级更高)

问题是,如何使用堆栈而不是阻塞队列

提前谢谢