Просто реализуйте пул как стек.
Когда вам нужен поток, вытолкните его из стека и используйте его.
Когда вы закончите с потоком, верните его обратно в стек.
Если стек пуст, блокируйте, пока не станет доступен поток.
Я бы порекомендовал использовать библиотеку (на том языке, который вы используете), которая создает / управляет пулом потоков вместо создания своей собственной.