http://zhk.me/1281.html
以下我们常用的数据结构,都是线程不安全的。
ArrayList, LinkedList
HashMap, LinkedHashMap, TreeMap
HashSet, LinkedHashSet, TreeSet
StringBuilder
parallelStream是以多线程的方式,执行定义的代码块。因为是多线程,所以在代码块里操作线程不安全的Collection,就会引发Concurrency问题。
List<String> results = Lists.newArrayList();
sources.parallelStream().forEach(source -> {
results.add(sigmaString(source));
results.add(lambdaString(source));
});
这段代码,是将sources中的每个source,转换成sigma string和lambda string,然后收集到results里面。实际运行时,results由于多线程问题,有些数据没有add进来,丢失了。
Solution 1: 不用parallel
当sources数据不多时,可以去掉paralle,直接使用stream,就避免了Concurrency issue。
List<String> results = Lists.newArrayList();
sources.stream().forEach(source -> {
results.add(sigmaString(source));
results.add(lambdaString(source));
});
Solution 2: 使用collect方法
我们使用外面的集合,无非是为了收集元素。Java8 Stream的collect方法,就是收集Stream里的元素,返回List,Set或Map等,并且它是线程安全的。下面用collect改写上面的代码:
List<String> results = sources.parallelStream()
.flatMap(source -> Stream.of(sigmaString(source), lambdaString(source)))
.collect(Collectors.toList());
没有使用外部的集合,并且使用到了parallelStream并行处理的优势。
分享到:
相关推荐
主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下
java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制
Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多线程与线程安全实践Java多...
Java中懒汉单例设计模式线程安全测试,单例设计模式的测试
Java 多线程 订票 示例 线程安全 Demo 例子 经典
Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多...
JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多...
Java多线程实现数据切割批量执行,实现限流操作。 java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。...
一个线程从A表读数据放入队列 N个线程从队列中取出数据,找到其在子表中的数据 对子表中的数据开3种线程:读,发email,标记状态 N个线程对完成的A表数据做最后处理 支持大数据量跑批,就是个例子,本来是公司发送...
JAVA使用线程池查询大批量数据
你将学习如何使用线程来提高效率,如何有效地使用它们,以及如何避免常见的错误。本书讨论了死锁、竞态条件以及饥饿等问题的细节,帮助你编写没有潜在bug的代码。 本书第二版提供了对Thread和ThreadGroup类、...
Java线程Java线程Java线程Java线程Java线程Java线程
NoHttp核心架构之多线程通信、线程安全、线程同步;synchronized锁,Lock锁;具体讲解请移步:http://blog.csdn.net/yanzhenjie1003/article/details/50992468
java内存模型和线程安全,详细解析java的 堆栈模型和线程机制
java多线程处理数据库数据,使用并发包,无框架,可批量处数据库数据,进行增删改。。等等操作。
[计算机毕设]基于java的多线程与线程安全实践-基于Http协议的断点续传系统设计与实现(源代码).zip [计算机毕设]基于java的多线程与线程安全实践-基于Http协议的断点续传系统设计与实现(源代码).zip [计算机毕设]基于...
Java多线程与线程安全实践-基于Http协议的断点续传.zip Java多线程与线程安全实践-基于Http协议的断点续传.zip Java多线程与线程安全实践-基于Http协议的断点续传.zip Java多线程与线程安全实践-基于Http协议的断点...
java 线程安全的几个测试小例子,充分的理解JMM中的线程内存模型
Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程