Подход, который вы предлагаете, который в основном основан на гипотезе о том, что существует возможное разрешение, если число потоков превышает количество задач, здесь не сработает, если вы уже выделяете пул потоков. Вы можете попробовать это, чтобы увидеть это. Это простой случай тупика, как вы указали в комментариях к вашему коду.
В таком случае используйте два отдельных пула потоков, один для внешнего и другой для внутреннего. И когда задача из внутреннего пула завершится, просто верните значение обратно во внешнее.
Или вы можете просто создать поток на лету, выполнить всю работу в нем, получить результат и вернуть его обратно во внешний интерфейс.