加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

鸟瞰 Java 并发框架

发布时间:2019-07-18 16:22:42 所属栏目:优化 来源:唐尤华
导读:1. 为什么要写这篇文章 几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。但是,当深入实现细节时,我们想起了一位智者曾经说过的话:细节决定成败。最终我们意识到 NoSQL 不是解决

8. RxJava

  • 这与上面的情况类似,唯一的区别是 RxJava 提供了更好的 DSL 可以进行流式编程,下面的例子中没有体现这一点。
  • 性能优于 CompletableFuture 处理并行任务。

8.1 何时使用?

如果编码的场景适合异步非阻塞方式,那么可以首选 RxJava 或任何响应式开发库。还具有诸如 back-pressure 之类的附加功能,可以在生产者和消费者之间平衡负载。

  1. int userId = new Random().nextInt(10) + 1; 
  2. ExecutorService executor = CustomThreads.getExecutorService(8); 
  3.  
  4. // I/O 任务 
  5. Observable<String> postsObservable = Observable.just(userId).map(o -> JsonService.getPosts()) 
  6. .subscribeOn(Schedulers.from(executor)); 
  7. Observable<String> commentsObservable = Observable.just(userId).map(o -> JsonService.getComments()) 
  8. .subscribeOn(Schedulers.from(executor)); 
  9. Observable<String> albumsObservable = Observable.just(userId).map(o -> JsonService.getAlbums()) 
  10. .subscribeOn(Schedulers.from(executor)); 
  11. Observable<String> photosObservable = Observable.just(userId).map(o -> JsonService.getPhotos()) 
  12. .subscribeOn(Schedulers.from(executor)); 
  13.  
  14. // 合并来自 /posts 和 /comments API 的响应 
  15. // 作为这个操作的一部分,将执行内存中的一些任务 
  16. Observable<String> postsAndCommentsObservable = Observable 
  17. .zip(postsObservable, commentsObservable, 
  18. (posts, comments) -> ResponseUtil.getPostsAndCommentsOfRandomUser(userId, posts, comments)) 
  19. .subscribeOn(Schedulers.from(executor)); 
  20.  
  21. // 合并来自 /albums 和 /photos API 的响应 
  22. // 作为这个操作的一部分,将执行内存中的一些任务 
  23. Observable<String> albumsAndPhotosObservable = Observable 
  24. .zip(albumsObservable, photosObservable, 
  25. (albums, photos) -> ResponseUtil.getAlbumsAndPhotosOfRandomUser(userId, albums, photos)) 
  26. .subscribeOn(Schedulers.from(executor)); 
  27.  
  28. // 构建最终响应 
  29. Observable.zip(postsAndCommentsObservable, albumsAndPhotosObservable, (r1, r2) -> r1 + r2) 
  30. .subscribeOn(Schedulers.from(executor)) 
  31. .subscribe((response) -> asyncResponse.resume(response), e -> asyncResponse.resume("error")); 

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读