2017-11-26 3 views

Antwort

8

Ja, es ist möglich.

Das Verfahren ist wie folgt:

  1. ein ForkJoinWorkerThreadFactory erstellen, die Fäden mit einer entsprechenden Priorität erzeugt.

  2. Erstellen Sie eine ForkJoinPool mit der obigen Thread-Fabrik.

  3. Instanziieren Sie den parallelen Strom.

  4. den Stream starten, indem sie es auf den ForkJoinPool

So etwas einreichen:

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(); 

(Beispielcode angepasst von http://www.baeldung.com/java-8-parallel-streams-custom-threadpool)

+0

'neue ForkJoinWorkerThread()' kompiliert nicht. – shmosel

+0

Ich sagte "etwas wie" :-) Es brauchte ein "Pool" -Argument. –

+0

Es kompiliert immer noch nicht. Ich denke, du musst es unterklassifizieren. – shmosel

Verwandte Themen