多线程开发遇到的问题
Posted chaos1973-newworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程开发遇到的问题相关的知识,希望对你有一定的参考价值。
最近在用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.没有创建线程池:执行这个方法的一个很大弊端是会不断的创建线程,不断销毁线程,会影响性能,解决方法是创建一个线程池。网上方法很多。
以上是关于多线程开发遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章