Java 8 ForkJoinTask - 即使子任务成功完成,主线程也会挂起

Java 8 ForkJoinTask - main thread hangs even though child tasks complete successfully

为什么尽管子任务完成了,但以下任务永远不会完成? miner.mine 执行了一些我可以看到已完成但提示永远不会返回的数据库插入。

private void run(Path path) {
    findAllFilesInDirectory(path).forEach(
        p -> ForkJoinTask.adapt(() -> miner.mine(p)).invoke());
}

private Stream<Path> findAllFilesInDirectory(final Path path) {
    try {
        return find(path, 1,
            (p, fileAttributes) -> fileAttributes.isRegularFile());
    } catch (IOException e) {
        LOGGER.error("There was an error processing path: {}.", path);

        return Stream.empty();
    }
}

显然,即使在执行数据库操作时,将 EntityManagerFactory 创建为静态变量也会导致此问题。关闭 EMF 解决了问题,但由于 EMF 是线程安全的(但 EntityManager 不是),因此没有理由在我每次访问数据库时都创建和关闭 EMF。这可能是一个 Hibernate 问题,我没有进一步调查。我改用 Spring Boot Data JPA。