2013-11-14 21 views
1

请参阅下面这段代码,它已从Android的Asynctask中获取。我认为它是面向模式的软件体系结构书中并发模式的半同步半异步模式的一个例子。有人可以确认吗?在Android Asynctask中实现POSA的半同步半Asyncc模式

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);   
     } 
    }  
} 
+0

我已经有了全部的想法。当然,SerialExecutor是半同步 - 半异步模式的一个例子。这里是我写的Asynctask内部结构... https://docs.google.com/document/d/1_zihWXAwgTAdJc013-bOLUHPMrjeUBZnDuPkzMxEEj0/edit?usp=sharing –

回答

2

所以是的,我可以证实这是真的。另外,我个人与POSA2的作者Doug Schmidt(我的博士顾问)讨论过这个问题,只是为了100%肯定(并给你更多的信心)。他给了我一个视频的链接,他在其中深入讨论了这个话题。

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

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

而且,这个主题已经涵盖了过去,并会在Coursera重现的POSA过程中再次被覆盖。这也讨论了软件模式并在Android框架中显示它们。

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

+0

谢谢你确认它。我喜欢Doug在Coursera的讲座。这些信息非常丰富..我还想借此机会感谢Doug和Coursera为全球许多渴望学习的学习者提供启发...... –