异步CompletableFuture的学习
public class TestCompletableFuture1 {
private static final String commandstr02 = "hahah";
private static ThreadPoolExecutor poolExecutor;
static {
ThreadFactory threadFactory = new Builder().namingPattern("send-wxMsg-pool-%d").build();
poolExecutor = new ThreadPoolExecutor(10, 10, 60, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(), threadFactory, new AbortPolicy());
poolExecutor.allowCoreThreadTimeOut(true);
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
poolExecutor.shutdown();
}
}));
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
AtomicReference<String> b= new AtomicReference<>("");
CompletableFuture<String> exceptionally = CompletableFuture.supplyAsync(new MyThread333(commandstr02), poolExecutor)
.whenComplete((result, throwable) -> {
b.set(result);
}).exceptionally((throwable) -> {
return b.get();
});
String s = exceptionally.get();
System.out.println(s);
}
}
class MyThread333 implements Supplier<String> {
private String commandstr;
public MyThread333(String commandstr) {
this.commandstr = commandstr;
}
@Override
public String get() {
int sum = 0;
for (int i = 0; i < 30; i++) {
sum += i;
System.out.println("Mythread333: " + i);
}
return String.valueOf(sum + 300000);
}
}