在 Android Asynctask 中实现 POSA 的半同步半异步模式



请参考以下一段代码,该代码取自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

最新更新