我有一个如下的Java代码:
Stream<String> stream = getStreamFromSomewhere()
ForkJoinPool pool = new ForkJoinPool(32);
pool.submit(() -> stream.parallel()
.filter(condition)
.forEach(x -> recursive(x))).get();
pool.shutdown();
现在这段代码运行得足够快,使用了我机器上的所有 32 个线程,每个线程的利用率都在 70-80% 左右。
奇怪的是,每隔几分钟左右,所有线程的 CPU 利用率都会下降到 0%,除了 2 个线程(有时是 1 个)会上升到 100%。大约一分钟后,它们会再次以 70-80% 的速度嗡嗡作响。这种行为每隔几分钟左右就会重复一次。
我无法确定可能导致这种情况的原因。任何想法都会有所帮助。