[英]Does Java's ArrayList.stream().anyMatch() guarantee in-order processing?
我有這個代碼:
ArrayList<Detector> detectors;
detectors.stream().anyMatch(d -> d.detectRead(impendingInstruction, fieldName));
但我還要保證:
true
,評估就會立即停止 這總是如此,或者如果不是,至少對於所有常見的JDK實現是否都是如此?
您的問題意味着關注流操作的副作用 ,否則您不會關心訂單或立即終止。 來自Javadoc :
副作用
通常,不鼓勵行為參數對流操作的副作用,因為它們通常會導致無意中違反無國籍要求以及其他線程安全危險。
如果行為參數確實有副作用,除非明確說明,否則不能保證這些副作用對其他線程的可見性,也不保證對同一流管道中“相同”元素的不同操作在同一個線程中執行。 此外,這些效果的排序可能令人驚訝。 即使管道被約束產生的結果與流源的遭遇順序一致(例如,IntStream.range(0,5).parallel()。map(x - > x * 2).toArray( )必須產生[0,2,4,6,8]),不保證映射器函數應用於單個元素的順序,或者對給定元素執行任何行為參數的線程。
所以合同似乎是你可以僥幸逃脫,但它不能保證工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.