相信大家在项目开发过程中会遇到需要将异步操作转换为同步操作的情况,下面给大家介绍 CompletableFuture 的用法
java
package future;
import java.util.Locale;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
public class Main {
public static void costTimeOperation(int a, int b, final Callback callback) {
Thread thread = new Thread() {
@Override
public void run() {
super.run();
try {
Thread.sleep(2000);
callback.onComplete(a+b);
} catch (Exception e) {
System.out.println(e);
callback.onError(e);
}
}
};
thread.start();
}
interface Callback {
void onComplete(int result);
void onError(Exception e);
}
public static void main(String[] args) {
CompletableFuture<Integer> future = new CompletableFuture<>();
int a = 1;
int b = 2;
costTimeOperation(a, b, new Callback() {
@Override
public void onComplete(int result) {
future.complete(result);
}
@Override
public void onError(Exception e) {
future.complete(null);
}
});
try {
System.out.printf(Locale.getDefault(), "Waiting for result of %d+%d...%n", a,b);
System.out.println(future.get(5000, TimeUnit.MILLISECONDS));
} catch (Exception e) {
System.out.println(e);
}
}
}