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

इस कोड के लिए, यह एकाधिक धागे पर चल रहा है? यदि नहीं, तो मैं इसे कैसे कर सकता हूं? मैं इस काम को गति देने के लिए अलग-अलग धागे पर चलाने के लिए प्रत्येक m.dosomething() चाहता हूं।जावा 8 स्ट्रीम मल्टीथ्रेडिंग

+5

मुझे लगता है कि आप देख रहे हैं [ 'parallelStream()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#parallelStream--) । – Tunaki

+3

Fyi, '.parallelStream()' 'ForkJoinPool.commonPool()' का उपयोग करेगा। –

+4

ध्यान रखें कि मल्टीथ्रेडिंग कई मामलों में, आपके कोड को धीमा कर सकती है। उदाहरण देखें [इस पृष्ठ] (http://gee.cs.oswego.edu/dl/html/StreamParallelGuidance.html) धाराओं के लेखकों में से एक द्वारा लिखित। –

उत्तर

11

इसे पूरा करने के लिए parallelStream() का उपयोग करें। ध्यान दें कि प्रलेखन कहता है कि यह "संभवतः समांतर" है, इसलिए एक मौका है कि आप एक समानांतर धारा वापस कर सकते हैं। मैं कल्पना करता हूं कि वे मामले दुर्लभ हैं, लेकिन ध्यान रखें कि यह वास्तव में एक सीमा है।

mylist.parallelStream() 
     .filter(m -> m.isokay() != null) 
     .forEach(m -> m.dosomething())); 
संबंधित मुद्दे