@Transactional(rollbackFor = Exception.class)
CompletableFuture<String> asyncUserData(String progressId, NpContext context) throws Exception;
@Override
@Async(value = "gsiTaskExecutor")
public CompletableFuture<String> asyncUserData(String progressId, NpContext context) throws Exception {
String userId = context.getUserId();
NpContextHolder.setContext(context);
String log = null;
try {
log = synUserData(progressId);
} catch (Exception e) {
e.printStackTrace();
LogHelper.info(CommonConstants.MODULE_NAME_USER,
CommonConstants.MODULE_NAME_USER +CommonConstants.LOG_POINT+CommonConstants.USER_SYN_MODULE_NAME, log.replaceAll("=", ":"));
throw e;
}
CompletableFuture<String> result = CompletableFuture.completedFuture(log);
LogHelper.info(CommonConstants.MODULE_NAME_USER,
CommonConstants.MODULE_NAME_USER +CommonConstants.LOG_POINT+CommonConstants.USER_SYN_MODULE_NAME, log.replaceAll("=", ":"));
return result;
}
import java.util.concurrent.CompletableFuture;
public class TestCompletableFuture {
public static void main(String[] args) throws Exception {
long start = System.currentTimeMillis();
CompletableFuture<String> future = CompletableFuture.supplyAsync(()->{
try {
Thread.sleep(1000);
int i = 0;
int a = 1/i;
} catch (Exception e) {
System.out.println("future失败了");
return "future失败了";
}
System.out.println("future成功了");
return "future成功了";
}, Executors.newSingleThreadExecutor());
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(()->{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("future1成功了");
return "future1成功了";
}, Executors.newSingleThreadExecutor());
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(()->{
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("future2成功了");
return "future2成功了";
}, Executors.newSingleThreadExecutor());
CompletableFuture<Void> all = CompletableFuture.allOf(future,future1,future2);
System.out.println("---阻塞开始---");
all.join();
System.out.println("---阻塞结束---"+(System.currentTimeMillis()-start));
System.out.println(future.get());
System.out.println(future1.get());
System.out.println(future2.get());
}
}
---阻塞开始---
future失败了
future1成功了
future2成功了
---阻塞结束---3100
future失败了
future1成功了
future2成功了
CompletableFuture方法详解