2015-10-16 59 views
9
mylist.stream() 
     .filter(m -> m.isokay() != null) 
     .forEach(m -> m.dosomething())); 

Bu kod için birden çok iş parçacığı üzerinde çalışıyor mu? Değilse nasıl yapabilirim? Bu çalışmayı hızlandırmak için her bir m.dosomething()'un ayrı iş parçacığı üzerinde çalışmasını istiyorum. Bunu gerçekleştirmek için parallelStream() kullanın.Java 8 Akış mizanpajı

+5

ben aradığınız düşünüyorum [ 'parallelStream()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#parallelStream--) . – Tunaki

+3

Fyi, '.parallelStream()' 'ForkJoinPool.commonPool()' işlevini kullanır. –

+4

Çoklu iş parçacığının birçok durumda kodunuzu yavaşlatabildiğini unutmayın. Bakınız örn. [Bu sayfa] (http://gee.cs.oswego.edu/dl/html/StreamParallelGuidance.html) akarsuların yazarlarından biri tarafından yazılmıştır. –

cevap

11

Dokümantasyonun "muhtemelen paralel" olduğunu belirttiğine dikkat edin, bu nedenle paralel olmayan bir akışı döndürebilirsiniz. Bu vakaların nadir olduğunu düşünürdüm, ama aslında bunun bir sınırlama olduğunun farkında ol.

mylist.parallelStream() 
     .filter(m -> m.isokay() != null) 
     .forEach(m -> m.dosomething()));