多线程开发遇到的问题

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

以上是关于多线程开发遇到的问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS多线程开发之GCD(下篇)

ArcEngine多线程开发

探索并发编程------ Java多线程开发技巧

java多线程开发容易犯的错误

iOS多线程编程的知识梳理

多线程日志帮助