1

Android の Asynctask から取得した次のコードを参照してください。Pattern Oriented Software Architecture book の同時実行パターンの Half Sync Half Async パターンの例だと思います。誰か確認してくれませんか?

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 の著者の 1 人である Doug Schmidt (My PhD Adviser) と個人的にこれについて話し合いましたが、100% 確実にするために (そしてより自信を持たせるために)。彼は、このトピックについて詳しく説明しているビデオへのリンクを教えてくれました。

これは、ヴァンダービルト大学で彼が教えているコースからのものです。このコースでは、OS/プラットフォームの例として Android を使用して、高度な動作原理 (同時実行など) を扱います。

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

また、このトピックは過去に取り上げられており、Coursera の定期的な POSA コースで再び取り上げられます。また、ソフトウェア パターンについても説明し、Android フレームワークでそれらを示します。

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

于 2014-02-14T16:34:00.837 に答える