|
|
1
2
从线程安全性和正确性的角度来看,解决方案1没有错。不过,性能(作为并行处理的优势)可能会受到影响。
我不会说这是一种不好的做法或是一些不可接受的事情。这只是不建议为了性能。
“意想不到的结果”是一个非常宽泛的术语,通常指不适当的同步,“刚才到底发生了什么?”-像行为一样。
事实并非如此。你可能不会遇到问题。
改变
*装箱
|
|
|
2
3
看看斯图亚特马克的回答 here -他使用的是有状态谓词。 这是一些潜在的问题,但是如果你不关心它们或者不真正理解它们,你应该很好。 首先是order,它在当前的并行处理实现中展示,但是如果您不关心order,就像在您的示例中一样,您是可以的。
第二个是潜在速度
第三个更微妙。有时不能保证
这里的要点是,由于您正在计数,因此不需要进行映射,因此跳过了映射。一般来说,影响某些中间操作的元件不能保证到达终端操作。想象一下
在您的例子中,imo,您做您所做的事情是非常安全的;但是如果您稍微更改了代码,这就需要额外的推理来证明它的正确性。我会选择解决方案2,因为它对我来说更容易理解,而且它没有上面列出的潜在问题。 |
|
|
3
1
案例2-在API中,IntStream类的Notes通过1种for循环的增量步骤返回从startinclusive(inclusive)到endinclusive(inclusive)的顺序IntStream,因此并行流正在逐个处理它并提供正确的顺序。
案例1-很明显,列表将并行处理,因此顺序将不正确。由于映射操作是并行执行的,因此由于线程调度的不同,相同输入的结果可能因运行而异,因此不能保证在同一线程中对同一流管道中的“相同”元素执行不同的操作,也不能保证映射器函数如何应用于流中的特定元素。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |