2013-11-14 22 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爲全球許多渴望學習的學習者提供啓發...... –