美文网首页
Java将异步调用转换为同步调用

Java将异步调用转换为同步调用

作者: 风云不羁 | 来源:发表于2019-05-04 11:17 被阅读0次

调用外部的Api时,根据自己业务需求有时需要同步调用,如果这些Api没有提供同步调用的方法,此时该如何转同步调用呢

下面提供一种Java中的实现方式:

public class AsyncCallback {
    private Boolean finished = null;

    public AsyncCallback call() {
        new Thread() {
            @Override
            public void run() {
                synchronized (AsyncCallback.this) {
                    try {
                        Thread.sleep(3000);

                        finished = true;
                    } catch (InterruptedException ignore) {
                        finished = false;
                    }
                    AsyncCallback.this.notifyAll();
                }
            }
        }.start();

        return this;
    }

    public boolean isFinished() {
        synchronized (this) {
            while (finished == null) {
                try {
                    wait();
                } catch (InterruptedException ignore) {
                }
            }
        }

        return finished;
    }

    public static Observable<Boolean> asyncCall() {
        return Observable.defer(new Callable<ObservableSource<? extends Boolean>>() {
            @Override
            public ObservableSource<? extends Boolean> call() throws Exception {
                return Observable.just(new AsyncCallback().call().isFinished());
            }
        });
    }

    @SuppressLint("CheckResult")
    public static void testAsync2Sync() {
        asyncCall().subscribeOn(Schedulers.computation())
                .observeOn(AndroidSchedulers.mainThread())
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {
                        Log.e("HTTP-LOG", "start call sync method");
                    }
                })
                .subscribe(new Consumer<Boolean>() {
                    @Override
                    public void accept(Boolean aBoolean) throws Exception {
                        Log.e("HTTP-LOG", "sync call returned, " + aBoolean);
                    }
                });
    }

通过这样的转换,就可以将异步接口转换为同步调用

相关文章

  • Java将异步调用转换为同步调用

    调用外部的Api时,根据自己业务需求有时需要同步调用,如果这些Api没有提供同步调用的方法,此时该如何转同步调用呢...

  • java回调机制

    java的调用机制主要分为同步调用、异步调用、回调这三种,当然也包括一些其它的,例如异步回调等。 同步调用是我们平...

  • BIO,NIO,AIO

    同步、异步、阻塞、非阻塞 同步与异步 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步...

  • 同步异步/阻塞非阻塞

    同步异步 同步和异步体现的是消息通知的方式 同步:调用者调用被调用者,被调用者在返回其结果前,调用者不会返回。实际...

  • 关于高并发的几个重要概念

    1.1 同步和异步 首先这里说的同步和异步是指函数/方法调用方面。 很明显,同步调用会等待方法的返回,异步调用会瞬...

  • 实战Java高并发程序设计笔记第一章

    相关术语 同步和异步 同步和异步用来形容一次方法调用。 同步:方法调用一旦开始,调用者必须等到方法调用结束后,才能...

  • JAVA语言系列:组合式异步编程

    1. 导论 同步API和异步API:同步/异步关注的是消息通知的机制。 同步:调用了某个方法,调用方在被调用方运行...

  • Spring Boot中使用@Async实现异步调用

    本文引用地址大神程序员DD link 什么是“异步调用”? “异步调用”对应的是“同步调用”,同步调用指程序按照...

  • 多线程基本概念

    1.同步&异步 同步和异步通常用来形容一次方法的调用。 同步方法一旦开始调用,调用者必须等待调用方法的返回,才能继...

  • 第一章 走进并行世界

    基本概念 1. 同步和异步 同步和异步通常用来形容一次方法调用 同步方法调用一旦开始,调用者必须等到方法调用返回后...

网友评论

      本文标题:Java将异步调用转换为同步调用

      本文链接:https://www.haomeiwen.com/subject/fykxoqtx.html