2017-11-26 87 views

Odpowiedz

8

Tak, jest to możliwe.

Procedura jest następująca:

  1. Tworzenie ForkJoinWorkerThreadFactory który tworzy wątki z odpowiednim priorytetem.

  2. Utwórz ForkJoinPool przy użyciu powyższej fabryki nici.

  3. Wywołaj równoległy strumień.

  4. Uruchom strumienia przez złożenie go do ForkJoinPool

tak:

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

(przykład kod dostosowany z http://www.baeldung.com/java-8-parallel-streams-custom-threadpool)

+0

'nowy ForkJoinWorkerThread()' nie kompiluje się. – shmosel

+0

Powiedziałem "coś w stylu" :-) Potrzebował argumentu "pool". –

+0

Nadal się nie kompiluje. Myślę, że musisz ją podklasować. – shmosel

Powiązane problemy