У меня есть http-контроллер, служба A, служба B. Есть http запрос. Метод вызова метода контроллера из A, метод вызова метода A из B. Контроллер -> А -> Б
Потоки и загрузчики:
Controller - [http-nio-8080-exec-7,5,main], TomcatEmbeddedWebappClassLoader
A - [http-nio-8080-exec-7,5,main], TomcatEmbeddedWebappClassLoader
B - [ForkJoinPool.commonPool-worker-3,5,main], jdk.internal.loader.ClassLoaders$AppClassLoader@6ed3ef1
Почему вызов B находится в другом потоке и загрузчике классов? Асинхронных вызовов нет.
ForkJoinPool — это реализация ExecutorService. Он разбирает задачу на несколько более мелких, запускается в параллельных потоках и объединяет их после завершения. Таким образом, конечный результат будет казаться синхронным. Если явного вызова нет, то какая-то внутренняя библиотека использует fork/join где-то в потоке.
Асинхронных вызовов нет... Ну видимо есть. Добавьте код для вашего контроллера и службы.