Еще через асинхроннку можно. Чтобы поток перебирал потоки: спрашивал, занят ли поток-исполнитель и давал ему задачу и прокси. Ну и чтобы руководящий поток ждал ответа - успех не успех. И в соответствии с этим дальше поступал.
Ну и чтобы рандомно выбирал из числа потоков-исполнителей к кому обратиться, если это важно.
Только как вы его сможете идентифицировать среди других потоков? Вам проще изначально сохранять эти данные в переменной вне обработчика в любом удобном виде (в зависимости от задачи разумеется). В таком случае вы сможете сделать с этим потоком что угодно и где угодно.