Java异步发布数据结构

时间:2014-03-11 16:25:24

标签: java android asynchronous data-structures

我有一个Android应用程序,目前正在打开一个webview活动。当它这样做时,它会在webview中加载网页的同时启动异步调用以下载一些数据。

一旦网页和数据准备就绪,我想将数据发送到webview。

我一直在寻找一个好的数据结构来做到这一点。目前我正在做这样的事情:

private String data;
private AtomicBoolean bothReady = new AtomicBoolean(false);


public void dataDownloaded(String data) {
    this.data = data;
    sendDataIfReady();
}

public void pageLoaded() {
    sendDataIfReady();
}

private void sendDataIfReady() {
    if (bothReady.getAndSet(true)) {
        sendData(this.data);
    }
}

这是一个简化版本,但这是它的要点。这感觉就像一个笨重的方式,我想知道在Java中是否有一个良好的数据结构,排队准备好的数据然后在页面准备就绪时发送它,无论哪个完成(并明显处理竞争条件等)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

对于异步请求,我建议您使用ScheduledExecutorService

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(20);

然后你可以定义AsyncNotice类:

class AsyncNotice implements Runnable {
    @Override
    public void run() {
        // do some needed work
    }
} 

然后你可以这样做:

scheduler.schedule(new AsyncNotice(), 5, TimeUnit.SECONDS);

scheduler.execute(new AsyncNotice());

这会返回ScheduledFuture,因此您甚至可以在将来取消它。