1

请参考下面这段取自 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);        
        }
    }    
}
4

1 回答 1

2

所以是的,我可以确认这是真的。

此外,我亲自与 POSA2 的作者之一 Doug Schmidt(我的博士顾问)讨论了这个问题,只是为了 100% 确定(并给你更多的信心)。他给了我一个视频链接,他在视频中深入讨论了这个话题。

这是他在范德比尔特大学教授的一门课程中的一门课程,其中他涵盖了高级操作原理(例如并发),其中使用 Android 作为示例 OS/平台。

http://www.youtube.com/watch?v=XZ29DAcmcLE

此外,该主题已在过去讨论过,并将在 Coursera 上重复出现的 POSA 课程中再次讨论。这也讨论了软件模式并在 Android 框架中展示了它们。

https://www.coursera.org/course/posa

于 2014-02-14T16:34:00.837 回答