我有一些如下所示的Java代码:
IntStream.range(0, N)
.parallel()
.forEach(
i -> {
// do some work
});
并在运行此代码时看到以下警告:
[WARNING] thread Thread[#73,ForkJoinPool.commonPool-worker-8,5,] was interrupted but is still alive after waiting at least 15000msecs
[WARNING] thread Thread[#73,ForkJoinPool.commonPool-worker-8,5,] will linger despite being asked to die via interruption
[WARNING] thread Thread[#74,ForkJoinPool.commonPool-worker-9,5,] will linger despite being asked to die via interruption
[WARNING] thread Thread[#75,ForkJoinPool.commonPool-worker-10,5,] will linger despite being asked to die via interruption
[WARNING] thread Thread[#76,ForkJoinPool.commonPool-worker-11,5,] will linger despite being asked to die via interruption
[WARNING] thread Thread[#77,ForkJoinPool.commonPool-worker-12,5,] will linger despite being asked to die via interruption
[WARNING] thread Thread[#78,ForkJoinPool.commonPool-worker-13,5,] will linger despite being asked to die via interruption
[WARNING] thread Thread[#79,ForkJoinPool.commonPool-worker-14,5,] will linger despite being asked to die via interruption
[WARNING] NOTE: 7 thread(s) did not finish despite being asked to via interruption. This is not a problem with exec:java, it is a problem with the running code. Although not serious, it should be remedied.
在不复制粘贴lambda中的所有代码的情况下,我无法提供一个可重复性最低的示例,这是不可行的,但我已经验证了以下内容:
- 在lambda中没有抛出异常
- 如果我使用
mvn spring-boot:run
运行我的应用程序,警告就会消失,但如果应用程序通过mvn exec:java
执行,警告就会出现.据我所知,前者会产生一个新的JVM,而后者不会.
如果有任何帮助或提示来解决这个问题,我将不胜感激.