vertx默认线程池eventLoops线程数量有限,在处理业务时为了不出现阻塞导致服务器失效,需要将eventLoops线程处理的任务转到其他线程上进行,从而释放eventLoops。
但是,1. 简单的使用@Async注解还是会导致eventLoops线程阻塞等待,达不到释放效果
2. 直接将任务使用其他线程池线程执行,使用Future获得异步执行结果时,要么调用阻塞方法get(),要么轮询看isDone()是否为true,这两种方法都不是很好,因为主线程也会被迫等待。
CompletableFuture,它针对Future做了改进,可以传入回调对象,当异步任务完成或者发生异常时,自动调用回调对象的回调方法,可以达到完全释放eventLoops线程的目的。
vertx中使用异步线程
最新推荐文章于 2022-12-07 14:53:15 发布