java8 异步api、循环、日期
异步api
对于多任务耗时的业务场景,一般我们会用到线程异步处理,在以前我们用 Thread 或者 Runnable 来实现异步,这是oracle官方做法,不过缺点很明显
对于复杂业务场景需要配置线程池
代码繁杂,对于新手容易造成不必要的bug
如果涉及到线程锁或线程通讯就棘手了
现在,java8为我们提供了CompletableFuture类,可以完全解决以上问题。
主要方法有:
runAsync() 异步无参返回
样例:
@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();
}
supplyAsync() 异步有参返回
样例:
@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);
}
allOf() 多个异步处理(针对有参返回)
样例:
@Test
public void asyncThread3()throws Exception{
CompletableFuture a = CompletableFuture.supplyAsync(() -> "hello");
CompletableFuture b &