当任务异步以后,那么拿到他的返回值就是一件复杂的事。
你可以使用callback,使用各种锁,也可以试一下CompletableFuture。


public class Main {
    public static void main(String[] args) {

        new Main().asyncCall(new CallBack() {
            @Override
            public void onResult(String result) {
                print(result);
            }
        });


        CompletableFuture<String> future = new CompletableFuture<>();

        new Main().asyncCall(new CallBack() {
            @Override
            public void onResult(String result) {
                future.complete(result);
            }
        });
        try {
        	// 异步改同步
            String result = future.get();
            print(result);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }

    public void asyncCall(CallBack callBack) {
        new Thread(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            callBack.onResult("123");
        }).start();
    }


    public static void print(String msg) {
        String name = Thread.currentThread().getName();
        System.out.println(name + ":" + msg);
    }
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

WDYDT-25-内存泄漏之binder相关 上一篇
WDYDT-23-Messenger使用 下一篇