请参考以下一段代码,该代码取自Android的Asynctask。 我认为这是《面向模式的软件架构》一书中并发模式的半同步半异步模式的示例。有人可以确认吗?
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 {
r.run();
} finally {
scheduleNext();
}
}
});
if (mActive == null) {
scheduleNext();
}
}
protected synchronized void scheduleNext() {
if ((mActive = mTasks.poll()) != null) {
THREAD_POOL_EXECUTOR.execute(mActive);
}
}
}
所以是的,我可以确认这是真的。
另外,我亲自与POSA2作者之一Doug Schmidt(我的博士生导师)讨论了这个问题,只是为了100%确定(并给你更多的信心)。他给了我一个视频链接,他在视频中深入讨论了这个话题。
这是他在范德堡大学教授的一门课程,其中他涵盖了高级操作原则(如并发),该原则使用 Android 作为示例操作系统/平台。
http://www.youtube.com/watch?v=XZ29DAcmcLE
此外,这个主题过去已经涉及过,并将在Coursera上的重复POSA课程中再次讨论。这也讨论了软件模式,并在Android框架中展示了它们。
https://www.coursera.org/course/posa