Java异步转同步的实现方法

 mobiledu2502861377 发布于 2022-11-04 14:16

用Java调用一个异步方法时,方法会马上返回,而结果会在之后再去取
例如:

javapublic void invoke(Runnable task) {
    threadPool.execute(task);
}

//或者

public  Future submit(Callable task) {
    return threadPool.submit(task);
}

以上方法都是异步的,对于需要得到返回结果的,可以通过future.get()来取得结果。

我的问题是:

如果一个方法一开始是异步的,我想把它转成同步来用,应该做哪些修改,或者是添加哪些类和逻辑?

Java中的异步转同步有没有哪些一般的编程模式?据说用CountDownLatch也可以实现异步转同步,但我还不太理解。

等待各位解答,先谢谢!

3 个回答
  • 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;
            }
        }
    2022-11-07 21:11 回答
  • Guava 有一个ListenableFuture 可以看看http://www.cnblogs.com/hupengcool/p/3991310.html

    2022-11-07 21:18 回答
  • 异步转同步一般思路就是轮询, 等待线程一直查询一个bool变量值, 执行线程在任务结束时候设置为bool为true, 这样等待线程接着就可以向下执行了

    2022-11-07 21:19 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有