ArrayList
不是
Synchronized
收集所以
ArrayList#add
不是线程安全的。使用
CopyOnWriteArrayList
相反,它是线程安全的。Java-8为我们提供了一些优秀的特性,其中之一是
parallelStream
整个系列。所以你可以利用这一点。但是,如果任务给您带来更多好处,您可以随时创建自己的线程池并执行任务。
下面的示例可能会帮助您
CopyOnWriteArrayList<StockQuote> topGainers = new CopyOnWriteArrayList<>();
dataArray.parallelStream().forEach(e->{
JSONObject temp = (JSONObject) dataArray.get(iter);
System.out.println(temp.get("symbol"));
//getQuote function has network calls.
//Serial implementation makes it take too much time
topGainers.add(this.getQuote((String)temp.get("symbol")));
});
您的云也使用
Collections#synchronizedList
。
评论中问题1的答案:
dataArray.parallelStream().forEach
将并行迭代列表。
从评论中回答问题2:
dataArray.parallelStream().forEach(e->{
JSONObject temp = (JSONObject) dataArray.get(iter);
System.out.println(temp.get("symbol"));
//getQuote function has network calls.
//Serial implementation makes it take too much time
if (some condition here) {
throw new YourException("Your exception messge");
}
topGainers.add(this.getQuote((String)temp.get("symbol")));
});