Android Asynctask中POSA半同步半异步模式的实现
请参考下面的一段代码,这段代码取自Android的Asynctask。我认为这是《面向模式的软件体系结构》一书中并发模式的半同步半异步模式的一个例子。有人能确认一下吗Android Asynctask中POSA半同步半异步模式的实现,android,design-patterns,android-asynctask,Android,Design Patterns,Android Asynctask,请参考下面的一段代码,这段代码取自Android的Asynctask。我认为这是《面向模式的软件体系结构》一书中并发模式的半同步半异步模式的一个例子。有人能确认一下吗 private static class SerialExecutor implements Executor { final ArrayDeque<Runnable> mTasks = new ArrayDeque<Runnable>(); Runnable mAc
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);
}
}
}
private静态类SerialExecutor实现Executor{
最终ArrayDeque mTasks=新ArrayDeque();
可运行的mActive;
公共同步的void execute(最终可运行r){
mTasks.offer(新的Runnable(){
public void run(){
试试{
r、 run();
}最后{
scheduleNext();
}
}
});
如果(mActive==null){
scheduleNext();
}
}
受保护的同步无效scheduleNext(){
如果((mActive=mTasks.poll())!=null){
线程池执行器执行(mActive);
}
}
}
是的,我可以确认这是真的
此外,我个人与POSA2作者之一道格·施密特(我的博士顾问)讨论了这一点,只是为了100%确定(并给你更多的信心)。他给了我一个视频链接,他在视频中深入讨论了这个话题
这是他在范德比尔特大学(Vanderbilt University)教授的一门课程,他在该课程中介绍了高级操作原理(如并发),该原理使用Android作为示例操作系统/平台
此外,这个主题在过去已经讨论过,并且将在Coursera上重新出现的POSA课程中再次讨论。这还讨论了软件模式,并在Android框架中展示了它们
我完全明白了。当然,SerialExecutor是半同步半异步模式的一个例子。下面是我为Asynctask内部编写的文章。。。谢谢你的确认。我喜欢道格在Coursera的演讲。这些资料真的很丰富。。我还想借此机会感谢Doug和Coursera,感谢他们在全球范围内启发了许多像我这样渴望学习的人。。。