所以,我在 AsyncTask 中有下面的代码,并且想要调用 7 个不同的异步 HTTP 请求。一切正常,所有 7 个 execute() 方法同时启动(花几毫秒,这很棒)。
不幸的是,这种方法所花费的时间是大约。16 秒。如果我排除所有执行程序的内容并在原始工作程序 Asynctask 上调用 HTTP 下载方法,则需要 aprox。9 秒。因此,实际上按顺序而不是并发花费的时间更少。任何想法为什么会发生这种情况?也许服务器端的东西?也许是因为执行程序是在 Asynctask 上启动的?非常感谢 !
MyExecutor executor = new MyExecutor(7, 7, 40000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
executor.execute(new Runnable()
{
@Override
public void run()
{
try {downloadSplashScreenJsonData();}
catch (Exception e)
{
Log.e(TAG, "Could not download splashscreen data.");
e.printStackTrace();
}
}
});
// after another 6 executor.execute() calls,
executor.shutdown();
executor.awaitTermination(40000, TimeUnit.MILLISECONDS);
class MyExecutor extends ThreadPoolExecutor
{
public MyExecutor(int corePoolSize, int maximumPoolSize,
long keepAliveTime, TimeUnit unit,
BlockingQueue<Runnable> workQueue) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
prestartAllCoreThreads();
// TODO Auto-generated constructor stub
}
@Override
public void execute(Runnable command) {
super.execute(command);
Log.e(TAG, "execute()");
Log.e(TAG, "no of thr: " + getActiveCount());
}
}