码迷,mamicode.com
首页 > 编程语言 > 详细

多线程开发遇到的问题

时间:2019-08-30 09:32:50      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:class   ring   影响   问题   开发   没有   问题:   join()   span   

最近在用java8的多线程技术进行开发的时候遇到一些问题,下面记录一下:

1 public void test(){
2 CompletableFuture<Map<String,Object>> cfA = CompletableFuture.supplyAsync(()->{
3      //此处为逻辑处理
4 });
5 CompletableFuture<Map<String,Object>> cfB = CompletableFuture.supplyAsync(()->{
6      //此处为逻辑处理
7 });
//cfC,cfD,cfE省略
CompletableFuture<Void> future = CompletableFuture.allOf(cfA,cfB,cfC,cfD,cfE);
future.join();
8 }

当时我面临的需求是把五个串行的接口改为五个并行的接口,然后将五个接口的查询结果合并起来。上面的代码是我写的代码简略版,我的代码存在如下问题:
1.对象没有克隆:五个线程处理同一个对象,相互之间会影响,所以我的执行结果一直在变化。解决办法是将对象克隆出五个副本,每个线程利用对象的副本处理逻辑,五个线程执行结束以后,将五个副本的结果合并到主对象上,返回结果。

2.没有创建线程池:执行这个方法的一个很大弊端是会不断的创建线程,不断销毁线程,会影响性能,解决方法是创建一个线程池。网上方法很多。

多线程开发遇到的问题

标签:class   ring   影响   问题   开发   没有   问题:   join()   span   

原文地址:https://www.cnblogs.com/Chaos1973-newWorld/p/11432998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!