java异步编程历史概述

1.Java5.0之前主要是通过Thread类,Runnable接口实现,主要的缺点是无法拿到异步线程的返回值,以及异常处理

new Thread(()-> System.out.println("111111"),"java5").start();

2.java5.0增加Future,Callable。主要缺点阻塞式编程,无法进行多个异步线程之间的操作,无法异常处理

ExecutorService executorService = Executors.newSingleThreadExecutor();
Callable<String> threadTask  = ()->"java7 callable";
Future<String> submit = executorService.submit(threadTask);
System.out.printf("java7 thread ===>%s \n",submit.get());
executorService.shutdown();

3.Java7.0引入Fork/join,类似于线程池,主要是压榨本地cp。。个人感觉实际工作中应用的不多

4.引入CompletableFuture

样例一:

CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(()->{
            System.out.println("java8 thread....");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "8888....";
        });

        System.out.println(completableFuture.get());

 

样例二:

List<Map<String, String>> result = new ArrayList<>();
        List<CompletableFuture<Boolean>> collect = Stream.of(1, 2, 3, 4, 10)
                .map(num ->
                        CompletableFuture.supplyAsync(() -> {
                            Map<String, String> hashMap = new HashMap<String, String>();
                            hashMap.put("i" + num, num + "");
                            try {
                                Thread.sleep(RandomUtils.nextInt(5000));
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            return hashMap;
                        }).thenApply(r -> result.add(r))).collect(Collectors.toList());

        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.allOf(collect.toArray(new CompletableFuture[]{}));
        voidCompletableFuture.join();

        System.out.println("===========main thread==========");
        for(Map<String,String> res:result){
            System.out.println(res.toString());
        }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java有多种方式来实现异步编程,以下是几种常见的方式: 1. 回调函数(Callback) 回调函数是一种常见的异步编程方式。在这种方式中,我们定义一个回调函数,当异步操作完成时,该回调函数将被调用。以下是一个基本的回调函数示例: ```java public interface Callback { void onSuccess(String result); void onError(Exception e); } public class AsyncOperation { public void executeAsync(Callback callback) { // 异步操作 // 成功时调用 callback.onSuccess(result) // 失败时调用 callback.onError(e) } } ``` 2. Future Future是Java提供的一个接口,可以用来表示一个异步操作的结果。在这种方式中,我们可以使用Future.get()方法来等待异步操作完成,并获取其结果。以下是一个基本的Future示例: ```java public class AsyncOperation { public Future<String> executeAsync() { ExecutorService executor = Executors.newSingleThreadExecutor(); return executor.submit(() -> { // 异步操作 return "result"; }); } } public class Main { public static void main(String[] args) throws Exception { AsyncOperation asyncOperation = new AsyncOperation(); Future<String> future = asyncOperation.executeAsync(); // 等待异步操作完成 String result = future.get(); System.out.println(result); } } ``` 3. CompletableFuture CompletableFuture是Java 8引入的一个类,可以用来处理异步操作。它提供了一些方法来管理异步操作的结果,并且可以将多个异步操作组合在一起。以下是一个基本的CompletableFuture示例: ```java public class AsyncOperation { public CompletableFuture<String> executeAsync() { return CompletableFuture.supplyAsync(() -> { // 异步操作 return "result"; }); } } public class Main { public static void main(String[] args) throws Exception { AsyncOperation asyncOperation = new AsyncOperation(); CompletableFuture<String> future = asyncOperation.executeAsync(); // 等待异步操作完成 String result = future.get(); System.out.println(result); } } ``` 4. RxJava RxJava是一个流式编程框架,可以用来处理异步操作。它提供了一些方法来处理异步操作的结果,并且可以将多个异步操作组合在一起。以下是一个基本的RxJava示例: ```java public class AsyncOperation { public Observable<String> executeAsync() { return Observable.create(emitter -> { // 异步操作 emitter.onNext("result"); emitter.onComplete(); }); } } public class Main { public static void main(String[] args) { AsyncOperation asyncOperation = new AsyncOperation(); asyncOperation.executeAsync().subscribe(result -> { System.out.println(result); }); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值