异步CompletableFuture的学习

异步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);
    }
}

版权声明:本文为qq_40198004原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。