异步API
对于多任务耗时的业务场景java日期格式化,一般我们会用到线程异步处理,在以前我们用 Thread 或者 Runnable 来实现异步,这是oracle官方做法,不过缺点很明显
现在,java8为我们提供了CompletableFuture类,可以完全解决以上问题。
主要方法有:
@Test
public void asyncThread()throws Exception{
CompletableFuture async1 = CompletableFuture.runAsync(()->{
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName());
System.out.println("none return Async");
}catch (Exception e){
e.printStackTrace();
}
});
// 调用get()将等待异步逻辑处理完成
async1.get();
}
@Test
public void asyncThread2()throws Exception{
CompletableFuture async2 = CompletableFuture.supplyAsync(()->{
return "hello";
});
String result = async2.get();
// String result2 = async2.get(5L, TimeUnit.SECONDS);
System.out.println(result);
}
@Test
public void asyncThread3()throws Exception{
CompletableFuture a = CompletableFuture.supplyAsync(() -> "hello");
CompletableFuture b = CompletableFuture.supplyAsync(() -> "youth");
CompletableFuture c = CompletableFuture.supplyAsync(() -> "!");
CompletableFuture all = CompletableFuture.allOf(a,b,c);
all.get();
String result = Stream.of(a, b,c)
.map(CompletableFuture::join)
.collect(Collectors.joining(" "));
System.out.println(result);
}
@Test
public void asyncThread4()throws Exception{
CompletableFuture a = CompletableFuture.supplyAsync(() ->{
try{
Thread.sleep(20);
return "hello";
}catch (Exception e){
e.printStackTrace();
return "none~";
}
});
CompletableFuture b = CompletableFuture.supplyAsync(() -> "youth");
CompletableFuture c = CompletableFuture.supplyAsync(() -> "!");
CompletableFuture