private class MyTask extends AsyncTask<String, String, String> {
//...
}
使用
MyTask myTask = new MyTask();
myTask.execute(url);
public abstract class AsyncTask<Params, Progress, Result> {
public static final Executor SERIAL_EXECUTOR = new SerialExecutor();
//默认的执行器就是SerialExecutor
private static volatile Executor sDefaultExecutor = SERIAL_EXECUTOR;
//
public final AsyncTask<Params, Progress, Result> execute(Params... params) {
// 默认的执行器sDefaultExecutor
return executeOnExecutor(sDefaultExecutor, params);
}
private static class SerialExecutor implements Executor {
final ArrayDeque<Runnable> mTasks = new ArrayDeque<Runnable>();
Runnable mActive;
public synchronized void execute(final Runnable r) {
mTasks.offer(new Runnable() {
public void run() {
try {
//【2】
r.run();
} finally {
//【3】
scheduleNext();
}
}
});
// 【0】仅第一个任务执行
if (mActive == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
//【1】
if ((mActive = mTasks.poll()) != null) {
THREAD_POOL_EXECUTOR.execute(mActive);
}
}
}
}
MyTask myTask = new MyTask();
myTask.executeOnExecutor((AsyncTask.THREAD_POOL_EXECUTOR));
public abstract class AsyncTask<Params, Progress, Result> {
private final FutureTask<Result> mFuture;
//
public static final Executor THREAD_POOL_EXECUTOR
= new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);
public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec,
Params... params) {
//...
exec.execute(mFuture);
return this;
}
}
直接使用THREAD_POOL_EXECUTOR 执行我们的 mFuture,就是并行执行
更多内容 欢迎关注公众号
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。