多线程的实现方式有哪些
三种实现方案:
1>继承Thread类的方法实现多线程
2>实现Runnable接口的方式实现多线程
3>利用Callable和Funture接口的方式实现多线程
1.2不能得到返回值,3可以获取返回值
三种方式都不可以控制资源
在项目代码中以上三种方式都不可取,需要使用线程池(将所有的多线程异步任务都交给线程池执行)确保系统的稳定运行
开发中为什么使用线程池

认识CompletableFuture
1.创建异步对象
public static CompletableFuture<Void> runAsync(Runnable runnable);
public static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor);
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier);
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor);
1.run开头的方法都是没有返回值的,supply的方法都是可以获取返回结果的
2.使用CompletableFuture异步编排大多方法都会有一个重载方法,会多出一个executor参数,用来传来自定义的线程池,如果不传就会使用默认的线程池。
CompletableFuture可用于线程异步编排,使原本串行执行的代码,变为并行执行,提高代码执行速度
简单使用:
CompletableFuture.whenComplete():用于接收带有返回值的CompletableFuture对象,无法修改返回值。
CompletableFuture.exceptionally():用于处理异常,只要异步线程中有抛出异常,则进入该方法,修改返回值。
CompletableFuture.handle():用于处理返回结果,可以接收返回值和异常,可以对返回值进行修改。
无返回值

有返回值 方法计算成功时回调 出现异常抓获并且给出默认值


本文介绍了多线程的三种实现方式及线程池的重要性,详细解析了CompletableFuture的多种用法,包括线程异步编排、串行化、组合任务等高级应用。
最低0.47元/天 解锁文章
628

被折叠的 条评论
为什么被折叠?



