Если все мои сборщики данных возвращают POJO напрямую вместо CompletableFuture, будет ли все выполнение GraphQL происходить в одном потоке?


да. Исходя из того, что я вижу из исходных кодов, если все сборщики данных возвращают только POJO, все выполнение будет выполняться в одном потоке.
Чтобы настроить сборщики данных для параллельной работы, вы должны использовать ExecutionStrategy, который поддерживает асинхронную обработку. Используемый по умолчанию запрос (AsyncExecutionStrategy) поддерживает, а мутация (AsyncSerialExecutionStrategy) — нет.
Сборщик данных также должен возвращать CompletableFuture с помощью CompletableFuture.supplyAsync(). Обратите внимание, что graphql-java предоставляет удобный сборщик данных под названием AsyncDataFetcher, который может обернуть обычный синхронный сборщик данных в асинхронный:
DataFetcher asyncDataFetcher = AsyncDataFetcher.async(fooDataFetcher);
Спасибо за Ваш ответ. Я спросил об этом в чате для GraphQL Java и получил тот же ответ от официальных разработчиков: спектр.чат/graphql-java/общий/…. Размещение ссылки, чтобы кто-то, кто смотрит на это, мог быть более уверен в ответе.