Java 类java.util.concurrent.ForkJoinWorkerThread 实例源码
项目:invesdwin-util
文件:ConfiguredForkJoinWorkerThreadFactory.java
@Override
public ForkJoinWorkerThread newThread(final ForkJoinPool pool) {
final String parentThreadName = Thread.currentThread().getName();
final ForkJoinWorkerThread t = new ForkJoinWorkerThread(pool) {
/**
* http://jsr166-concurrency.10961.n7.nabble.com/How-to-set-the-thread-group-of-the-ForkJoinPool-td1590.html
*/
@Override
protected void onStart() {
super.onStart();
final String curThreadName = threadpoolId + "-" + threadIds.incrementAndGet() + ":" + name;
setName(curThreadName + Threads.NESTED_THREAD_NAME_SEPARATOR + parentThreadName);
}
};
/*
* So that exceptions are still logged if runnables are sent into executors without futures being checked. This
* keeps the default behaviour expected from normal threads.
*/
if (t.getUncaughtExceptionHandler() != Thread.getDefaultUncaughtExceptionHandler()) {
throw new IllegalArgumentException(
UncaughtExceptionHandler.class.getSimpleName() + " is not already set properly!");
}
return t;
}
项目:grpc-java
文件:LoadServer.java
ExecutorService getExecutor(int asyncThreads) {
// TODO(carl-mastrangelo): This should not be necessary. I don't know where this should be
// put. Move it somewhere else, or remove it if no longer necessary.
// See: https://github.com/grpc/grpc-java/issues/2119
return new ForkJoinPool(asyncThreads,
new ForkJoinWorkerThreadFactory() {
final AtomicInteger num = new AtomicInteger();
@Override
public ForkJoinWorkerThread newThread(ForkJoinPool pool) {
ForkJoinWorkerThread thread = defaultForkJoinWorkerThreadFactory.newThread(pool);
thread.setDaemon(true);
thread.setName("server-worker-" + "-" + num.getAndIncrement());
return thread;
}
}, UncaughtExceptionHandlers.systemExit(), true /* async */);
}
项目:grpc-java
文件:Utils.java
private static synchronized ExecutorService getExecutor() {
if (clientExecutor == null) {
clientExecutor = new ForkJoinPool(
Runtime.getRuntime().availableProcessors(),
new ForkJoinWorkerThreadFactory() {
final AtomicInteger num = new AtomicInteger();
@Override
public ForkJoinWorkerThread newThread(ForkJoinPool pool) {
ForkJoinWorkerThread thread = defaultForkJoinWorkerThreadFactory.newThread(pool);
thread.setDaemon(true);
thread.setName("grpc-client-app-" + "-" + num.getAndIncrement());
return thread;
}
}, UncaughtExceptionHandlers.systemExit(), true /* async */);
}
return clientExecutor;
}
项目:buck
文件:MostExecutors.java
/**
* Construct a ForkJoinPool with a stricter thread limit.
*
* <p>ForkJoinPool by default will create a new thread to handle pending work whenever an existing
* thread becomes blocked on a task and cannot work steal. In cases when many tasks would block on
* a slow running dependency, it can trigger thread creation for all those tasks.
*
* <p>Note that limiting the maximum threads will impact the ability for ManagedBlockers to cause
* the pool to create new worker threads, leading to potential deadlock if many ManagedBlockers
* are used.
*/
public static ForkJoinPool forkJoinPoolWithThreadLimit(int parallelism, int spares) {
AtomicInteger activeThreads = new AtomicInteger(0);
return new ForkJoinPool(
parallelism,
pool -> {
if (activeThreads.get() > parallelism + spares) {
return null;
}
return new ForkJoinWorkerThread(pool) {
@Override
protected void onStart() {
super.onStart();
activeThreads.incrementAndGet();
}
@Override
protected void onTermination(Throwable exception) {
activeThreads.decrementAndGet();
super.onTermination(exception);
}
};
},
/* handler */ null,
/* asyncMode */ false);
}
项目:java-threading
文件:AwaitExtensions.java
/**
* Gets a value indicating whether no yield is necessary.
*
* @return {@code true} if the caller is already running on that {@link Executor}.
*/
@Override
public boolean isDone() {
if (this.alwaysYield) {
return false;
}
if (executor instanceof ForkJoinPool) {
Thread currentThread = Thread.currentThread();
if (currentThread instanceof ForkJoinWorkerThread) {
ForkJoinWorkerThread forkJoinWorkerThread = (ForkJoinWorkerThread)currentThread;
return forkJoinWorkerThread.getPool() == executor;
}
}
return false;
// // We special case the TaskScheduler.Default since that is semantically equivalent to being
// // on a ThreadPool thread, and there are various ways to get on those threads.
// // TaskScheduler.Current is never null. Even if no scheduler is really active and the current
// // thread is not a threadpool thread, TaskScheduler.Current == TaskScheduler.Default, so we have
// // to protect against that case too.
//#if DESKTOP
// bool isThreadPoolThread = Thread.CurrentThread.IsThreadPoolThread;
//#else
// // An approximation of whether we're on a threadpool thread is whether
// // there is a SynchronizationContext applied. So use that, since it's
// // available to portable libraries.
// bool isThreadPoolThread = SynchronizationContext.Current == null;
//#endif
// return (this.scheduler == TaskScheduler.Default && isThreadPoolThread)
// || (this.scheduler == TaskScheduler.Current && TaskScheduler.Current != TaskScheduler.Default);
}
项目:openjdk-jdk10
文件:ForkJoinTask8Test.java
/**
* pollSubmission returns unexecuted submitted task, if present
*/
public void testPollSubmission() {
final CountDownLatch done = new CountDownLatch(1);
final ForkJoinTask a = ForkJoinTask.adapt(awaiter(done));
final ForkJoinTask b = ForkJoinTask.adapt(awaiter(done));
final ForkJoinTask c = ForkJoinTask.adapt(awaiter(done));
final ForkJoinPool p = singletonPool();
try (PoolCleaner cleaner = cleaner(p, done)) {
Thread external = new Thread(new CheckedRunnable() {
public void realRun() {
p.execute(a);
p.execute(b);
p.execute(c);
}});
RecursiveAction s = new CheckedRecursiveAction() {
protected void realCompute() {
external.start();
try {
external.join();
} catch (Exception ex) {
threadUnexpectedException(ex);
}
assertTrue(p.hasQueuedSubmissions());
assertTrue(Thread.currentThread() instanceof ForkJoinWorkerThread);
ForkJoinTask r = ForkJoinTask.pollSubmission();
assertTrue(r == a || r == b || r == c);
assertFalse(r.isDone());
}};
p.invoke(s);
}
}
项目:openjdk-jdk10
文件:RecursiveActionTest.java
/**
* getPool of current thread in pool returns its pool
*/
public void testWorkerGetPool() {
final ForkJoinPool mainPool = mainPool();
RecursiveAction a = new CheckedRecursiveAction() {
protected void realCompute() {
ForkJoinWorkerThread w =
(ForkJoinWorkerThread) Thread.currentThread();
assertSame(mainPool, w.getPool());
}};
testInvokeOnPool(mainPool, a);
}
项目:openjdk-jdk10
文件:RecursiveActionTest.java
/**
* getPoolIndex of current thread in pool returns 0 <= value < poolSize
*/
public void testWorkerGetPoolIndex() {
final ForkJoinPool mainPool = mainPool();
RecursiveAction a = new CheckedRecursiveAction() {
protected void realCompute() {
ForkJoinWorkerThread w =
(ForkJoinWorkerThread) Thread.currentThread();
assertTrue(w.getPoolIndex() >= 0);
// pool size can shrink after assigning index, so cannot check
// assertTrue(w.getPoolIndex() < mainPool.getPoolSize());
}};
testInvokeOnPool(mainPool, a);
}
项目:openjdk9
文件:ForkJoinTask8Test.java
/**
* pollSubmission returns unexecuted submitted task, if present
*/
public void testPollSubmission() {
final CountDownLatch done = new CountDownLatch(1);
final ForkJoinTask a = ForkJoinTask.adapt(awaiter(done));
final ForkJoinTask b = ForkJoinTask.adapt(awaiter(done));
final ForkJoinTask c = ForkJoinTask.adapt(awaiter(done));
final ForkJoinPool p = singletonPool();
try (PoolCleaner cleaner = cleaner(p, done)) {
Thread external = new Thread(new CheckedRunnable() {
public void realRun() {
p.execute(a);
p.execute(b);
p.execute(c);
}});
RecursiveAction s = new CheckedRecursiveAction() {
protected void realCompute() {
external.start();
try {
external.join();
} catch (Exception ex) {
threadUnexpectedException(ex);
}
assertTrue(p.hasQueuedSubmissions());
assertTrue(Thread.currentThread() instanceof ForkJoinWorkerThread);
ForkJoinTask r = ForkJoinTask.pollSubmission();
assertTrue(r == a || r == b || r == c);
assertFalse(r.isDone());
}};
p.invoke(s);
}
}
项目:openjdk9
文件:RecursiveActionTest.java
/**
* getPool of current thread in pool returns its pool
*/
public void testWorkerGetPool() {
final ForkJoinPool mainPool = mainPool();
RecursiveAction a = new CheckedRecursiveAction() {
protected void realCompute() {
ForkJoinWorkerThread w =
(ForkJoinWorkerThread) Thread.currentThread();
assertSame(mainPool, w.getPool());
}};
testInvokeOnPool(mainPool, a);
}
项目:openjdk9
文件:RecursiveActionTest.java
/**
* getPoolIndex of current thread in pool returns 0 <= value < poolSize
*/
public void testWorkerGetPoolIndex() {
final ForkJoinPool mainPool = mainPool();
RecursiveAction a = new CheckedRecursiveAction() {
protected void realCompute() {
ForkJoinWorkerThread w =
(ForkJoinWorkerThread) Thread.currentThread();
assertTrue(w.getPoolIndex() >= 0);
// pool size can shrink after assigning index, so cannot check
// assertTrue(w.getPoolIndex() < mainPool.getPoolSize());
}};
testInvokeOnPool(mainPool, a);
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Before
@SuppressWarnings({"unchecked", "rawtypes"})
public void init() {
// Precondition for all tests
assertFalse("This test must not run in a ForkJoinPool", currentThread() instanceof ForkJoinWorkerThread);
this.mappedDelegateMock = mock(Stream.class);
this.mappedIntDelegateMock = mock(IntStream.class);
this.mappedLongDelegateMock = mock(LongStream.class);
this.mappedDoubleDelegateMock = mock(DoubleStream.class);
this.toArrayResult = new String[0];
when(this.delegateMock.map(anyObject())).thenReturn((Stream) this.mappedDelegateMock);
when(this.delegateMock.mapToInt(anyObject())).thenReturn(this.mappedIntDelegateMock);
when(this.delegateMock.mapToLong(anyObject())).thenReturn(this.mappedLongDelegateMock);
when(this.delegateMock.mapToDouble(anyObject())).thenReturn(this.mappedDoubleDelegateMock);
when(this.delegateMock.flatMap(anyObject())).thenReturn((Stream) this.mappedDelegateMock);
when(this.delegateMock.flatMapToInt(anyObject())).thenReturn(this.mappedIntDelegateMock);
when(this.delegateMock.flatMapToLong(anyObject())).thenReturn(this.mappedLongDelegateMock);
when(this.delegateMock.flatMapToDouble(anyObject())).thenReturn(this.mappedDoubleDelegateMock);
when(this.delegateMock.isParallel()).thenReturn(false);
when(this.delegateMock.toArray()).thenReturn(this.toArrayResult);
when(this.delegateMock.toArray(anyObject())).thenReturn(this.toArrayResult);
when(this.delegateMock.reduce(anyString(), anyObject())).thenReturn("reduce");
when(this.delegateMock.reduce(anyObject())).thenReturn(Optional.of("reduce"));
when(this.delegateMock.reduce(anyObject(), anyObject(), anyObject())).thenReturn(42);
when(this.delegateMock.collect(anyObject(), anyObject(), anyObject())).thenReturn(42);
when(this.delegateMock.collect(anyObject())).thenReturn(singletonList("collect"));
when(this.delegateMock.min(anyObject())).thenReturn(Optional.of("min"));
when(this.delegateMock.max(anyObject())).thenReturn(Optional.of("max"));
when(this.delegateMock.count()).thenReturn(42L);
when(this.delegateMock.anyMatch(anyObject())).thenReturn(true);
when(this.delegateMock.allMatch(anyObject())).thenReturn(true);
when(this.delegateMock.noneMatch(anyObject())).thenReturn(true);
when(this.delegateMock.findFirst()).thenReturn(Optional.of("findFirst"));
when(this.delegateMock.findAny()).thenReturn(Optional.of("findAny"));
this.delegate = singletonList("x").parallelStream();
this.parallelStreamSupport = new ParallelStreamSupport<>(this.delegate, this.workerPool);
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void forEachParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport.forEach(s -> threadRef.set(currentThread()));
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void forEachOrderedParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport.forEachOrdered(s -> threadRef.set(currentThread()));
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void toArrayParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.toArray();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void toArrayWithGeneratorParallel() {
this.parallelStreamSupport.parallel();
IntFunction<String[]> generator = i -> new String[i];
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.toArray(generator);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void reduceWithIdentityAndAccumulatorParallel() {
this.parallelStreamSupport.parallel();
BinaryOperator<String> accumulator = (a, b) -> b;
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.reduce("a", accumulator);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void reduceWithAccumulatorParallel() {
this.parallelStreamSupport.parallel();
BinaryOperator<String> accumulator = (a, b) -> b;
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.reduce(accumulator);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void reduceWithIdentityAndAccumulatorAndCombinerParallel() {
this.parallelStreamSupport.parallel();
BiFunction<Thread, String, Thread> accumulator = (a, b) -> currentThread();
BinaryOperator<Thread> combiner = (a, b) -> b;
Thread result = this.parallelStreamSupport.reduce(currentThread(), accumulator, combiner);
assertThat(result, instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void collectWithSupplierAndAccumulatorAndCombinerParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void collectWithCollectorParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.collect(toList());
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void minParallel() {
this.parallelStreamSupport.parallel();
Comparator<String> comparator = (a, b) -> 0;
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.min(comparator);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void maxParallel() {
this.parallelStreamSupport.parallel();
Comparator<String> comparator = (a, b) -> 0;
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.max(comparator);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void countParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.count();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void anyMatchParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.anyMatch(s -> true);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void allMatchParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.allMatch(s -> true);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void noneMatchParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.noneMatch(s -> true);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void findFirstParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.findFirst();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelStreamSupportTest.java
@Test
public void findAnyParallel() {
this.parallelStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelStreamSupport
.peek(s -> threadRef.set(currentThread()))
.findAny();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void forEachParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport.forEach(i -> threadRef.set(currentThread()));
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void forEachOrderedParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport.forEachOrdered(i -> threadRef.set(currentThread()));
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void toArrayParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.toArray();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void reduceWithIdentityAndAccumulatorParallel() {
this.parallelLongStreamSupport.parallel();
LongBinaryOperator accumulator = (a, b) -> b;
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.reduce(0, accumulator);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void reduceWithAccumulatorParallel() {
this.parallelLongStreamSupport.parallel();
LongBinaryOperator accumulator = (a, b) -> b;
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.reduce(accumulator);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void collectWithSupplierAndAccumulatorAndCombinerParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void sumParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.sum();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void minParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.min();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void maxParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.max();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void countParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.count();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}
项目:parallel-stream-support
文件:ParallelLongStreamSupportTest.java
@Test
public void averageParallel() {
this.parallelLongStreamSupport.parallel();
AtomicReference<Thread> threadRef = new AtomicReference<>();
this.parallelLongStreamSupport
.peek(i -> threadRef.set(currentThread()))
.average();
assertThat(threadRef.get(), instanceOf(ForkJoinWorkerThread.class));
}