java流中的短路终端操作在不同VM上的行为是否不同?

java流中的短路终端操作在不同VM上的行为是否不同?,java,java-stream,Java,Java Stream,我有一些对象的列表,并在其上创建了一个并行流,我运行了一些操作,最后得到了allMatch(),如下所示: if(objects.parallelStream().[...].allMatch(this::hasException)) { throw new RuntimeException(); } 我在不同的vm(本地机器和bambol)上看到此管道的不同行为 在我的本地机器上,所有元素都被处理 从来没有发生过一次错过。在竹子上只要一些。大多数情况下,前两个。从来没有发生过所有的事

我有一些对象的
列表
,并在其上创建了一个并行流,我运行了一些操作,最后得到了
allMatch()
,如下所示:

if(objects.parallelStream().[...].allMatch(this::hasException)) {
    throw new RuntimeException();
}
我在不同的
vm
(本地机器和
bambol
)上看到此管道的不同行为

在我的本地机器上,所有元素都被处理

从来没有发生过一次错过。在
竹子上
只要一些。大多数情况下,前两个。从来没有发生过所有的事情都被处理过

由于
allMatch()
是一种短路终端操作,我可以理解并不是所有的元素都被处理,但我总是希望在任何地方都有相同的行为

我没有找到关于这一点的任何文档/解释

有人能解释这种行为吗


谢谢大家!

你怎么知道“一些”被遗漏了?但是无论哪种方式,如果
allMatch
会报告
false
,“some”missed都很正常,您的本地和竹机可能有不同数量的CPU,拆分器可能以不同的方式拆分这些CPU-因此观察到的行为,但我主要是猜测,我知道并不是所有的问题都得到了处理,因为我放了一些日志来分析问题。还有一个理由是,我可以在列表中的对象中看到管道操作的结果。我必须指出,编写代码的人不知道
allMatch()
短路(我在分析问题时也发现了这一点),
allMatch()
跳过部分元素是可以的,它应该这样做。我对此没有异议。我不能理解的是这种不同的行为。因为CPU的数量而拆分列表可能是一种解释。即使是这样,只要结果正确,您为什么会在意……我没有说的是(因为这与问题无关),代码依赖于正在处理的所有元素。因此,我没有获得管道的正确/预期结果。问题是关于不同机器上的不同行为。