|
7
|
| Eric Nordvik · 技术社区 · 16 年前 |
|
|
1
16
如果看不到你的代码,就很难知道会发生什么。但首先想到的是,您的网络请求发生在不同的线程上,因此
不过,我认为您可能误解了异步任务的必要性。filter对象已经在执行类似于asynctask的操作:
另一种解决方案是使用sync,它稍微复杂一些,但这是我在filter对象中所做的(由于现有的体系结构在后台执行api调用,使用异步回调而不是performfiltering()所需的阻塞/同步步骤)使用wait()/notify()将对象更新为执行跨线程监视,因此效果与直接在performfiltering()中执行网络请求相同,但它实际上发生在多个线程中:
但是,我认为您可能会发现,最简单的解决方案是直接在performfiltering()方法中同步地执行网络请求。如果您已经为异步/回调驱动的API调用准备好了体系结构,并且不想为了在performfiltering()中获得同步结果而更改该行为,那么上面的代码示例只是一种可能性。 |
|
|
2
1
我认为乔的回答是正确的。不过,我认为你应该 CountDownLatch 而不是等待/通知。 原因是,使用wait/notify,如果您的api在您开始“wait()”之前真的返回得非常快,那么您就有可能遇到竞争条件……在这种情况下,notify将不起作用,wait()将无限期地等待。 使用闩锁,代码将如下所示(从joe复制并修改):
最后,我没有足够的信用来发表评论,否则我会… |