2017-11-26 45 views
10

यदि मैं पृष्ठभूमि कार्य में समानांतर में स्ट्रीम चलाने के लिए चाहता हूं तो क्या इसे कम प्राथमिकता में चलाने के लिए संभव है? और यदि ऐसा है तो कैसे?क्या Stream.parallel() में धागे की प्राथमिकता सेट करना संभव है?

उत्तर

8

हां यह संभव है।

प्रक्रिया इस प्रकार है:

  1. एक ForkJoinWorkerThreadFactory है कि एक उचित प्राथमिकता के साथ धागे बनाता है बनाएँ।

  2. उपरोक्त थ्रेड फैक्ट्री का उपयोग करके ForkJoinPool बनाएं।

  3. समानांतर धारा को त्वरित करें।

  4. ForkJoinPool

कुछ इस तरह करने के लिए इसे प्रस्तुत करके धारा चलाएँ:

public class MyThread extends ForkJoinWorkerThread { 
    public MyThread(ForkJoinPool pool, int priority) { 
     super(pool); 
     setPriority(priority); 
    } 
} 

final int poolSize = ... 
final int priority = ... 

List<Long> aList = LongStream.rangeClosed(firstNum, lastNum).boxed() 
    .collect(Collectors.toList()); 

ForkJoinWorkerThreadFactory factory = new ForkJoinWorkerThreadFactory() { 
    public ForkJoinWorkerThread newThread(ForkJoinPool pool) { 
     return new MyThread(pool, priority); 
    } 
}; 
/* 
ForkJoinWorkerThreadFactory factory = pool -> new MyThread(
    pool, 
    priority 
); 
*/ 

ForkJoinPool customThreadPool = new ForkJoinPool(
    poolSize, factory, null, false); 
long actualTotal = customThreadPool.submit(
    () -> aList.parallelStream().reduce(0L, Long::sum)).get(); 

+0

'नई ForkJoinWorkerThread (उदाहरण कोड http://www.baeldung.com/java-8-parallel-streams-custom-threadpool से रूपांतरित)()' संकलित नहीं करता है। – shmosel

+0

मैंने कहा "कुछ ऐसा" :-) इसे 'पूल' तर्क की आवश्यकता है। –

+0

यह अभी भी संकलित नहीं करता है। मुझे लगता है कि आपको इसे उपclass करना है। – shmosel

संबंधित मुद्दे