ForkJoin thread pools are specially handled with CompletableFuture. Specifically, join()/get() calls will allow work stealing from other fork join threads. This fixes a deadlock where the worldgen worker is waiting on the I/O worker.