用Java调用一个异步方法时,方法会马上返回,而结果会在之后再去取
例如:
public void invoke(Runnable task) {
threadPool.execute(task);
}
//或者
public <T> Future<T> submit(Callable<T> task) {
return threadPool.submit(task);
}
以上方法都是异步的,对于需要得到返回结果的,可以通过future.get()来取得结果。
我的问题是:
如果一个方法一开始是异步的,我想把它转成同步来用,应该做哪些修改,或者是添加哪些类和逻辑?
Java中的异步转同步有没有哪些一般的编程模式?据说用CountDownLatch也可以实现异步转同步,但我还不太理解。
等待各位解答,先谢谢!
public synchronized TIMMessage queryLatestMessage(TIMConversation conversation) throws InterruptedException {
final CountDownLatch latch = new CountDownLatch(1);
final List<TIMMessage> typeMessages = new ArrayList<>();
conversation.getMessage(1, null, new TIMValueCallBack<List<TIMMessage>>() {
@Override
public void onError(int code, String desc) {
latch.countDown();
}
@Override
public void onSuccess(List<TIMMessage> msgs) {
TIMMessage msg0 = null;
if (msgs.size() < 1) {
return;
}
for (TIMMessage msg : msgs) {
if (msg.status() != TIMMessageStatus.HasDeleted) {
typeMessages.add(msg);
break;
}
}
latch.countDown();
}
});
latch.await();
if (typeMessages.size() > 0) {
return typeMessages.get(0);
} else {
return null;
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。