Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Asynctask中POSA半同步半异步模式的实现_Android_Design Patterns_Android Asynctask - Fatal编程技术网

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

Android Asynctask中POSA半同步半异步模式的实现,android,design-patterns,android-asynctask,Android,Design Patterns,Android Asynctask,请参考下面的一段代码,这段代码取自Android的Asynctask。我认为这是《面向模式的软件体系结构》一书中并发模式的半同步半异步模式的一个例子。有人能确认一下吗 private static class SerialExecutor implements Executor { final ArrayDeque<Runnable> mTasks = new ArrayDeque<Runnable>(); Runnable mAc

请参考下面的一段代码,这段代码取自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);        
        }
    }    
}
private静态类SerialExecutor实现Executor{
最终ArrayDeque mTasks=新ArrayDeque();
可运行的mActive;
公共同步的void execute(最终可运行r){
mTasks.offer(新的Runnable(){
public void run(){
试试{
r、 run();
}最后{
scheduleNext();
}        
}
});
如果(mActive==null){
scheduleNext();
}        
}        
受保护的同步无效scheduleNext(){
如果((mActive=mTasks.poll())!=null){
线程池执行器执行(mActive);
}
}    
}

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

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

这是他在范德比尔特大学(Vanderbilt University)教授的一门课程,他在该课程中介绍了高级操作原理(如并发),该原理使用Android作为示例操作系统/平台

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


我完全明白了。当然,SerialExecutor是半同步半异步模式的一个例子。下面是我为Asynctask内部编写的文章。。。谢谢你的确认。我喜欢道格在Coursera的演讲。这些资料真的很丰富。。我还想借此机会感谢Doug和Coursera,感谢他们在全球范围内启发了许多像我这样渴望学习的人。。。