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

Per questo codice, è in esecuzione su più thread? In caso contrario, come posso farlo? Voglio che ogni m.dosomething() venga eseguito su thread separati per velocizzare il lavoro.Multithreading Java 8 Stream

+5

Penso che si sta cercando [ 'parallelStream()'] (https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html#parallelStream--) . – Tunaki

+3

Fyi, '.parallelStream()' farà uso di 'ForkJoinPool.commonPool()'. –

+4

Tieni presente che il multithreading può, in molti casi, rallentare il tuo codice. Vedi per es. [questa pagina] (http://gee.cs.oswego.edu/dl/html/StreamParallelGuidance.html) scritta da uno degli autori di stream. –

risposta

11

Utilizzare parallelStream() per ottenere ciò. Nota che la documentazione dice che è "possibilmente parallelo", quindi c'è la possibilità che tu possa restituire un flusso non parallelo. Immagino che quei casi siano rari, ma sappi che è in realtà una limitazione.

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