当任务异步以后,那么拿到他的返回值就是一件复杂的事。
你可以使用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 协议 ,转载请注明出处!