Я бы сказал, что не нужно управлять потоками самостоятельно, поскольку это не просто и очень сложно. Вместо этого используйте фреймворк, такой как testNG
TestNG поддерживает параллельное выполнение с использованием нескольких потоков на уровне класса / методов / теста
<suite name="My suite" parallel="methods" thread-count="5">
<suite name="My suite" parallel="tests" thread-count="5">
<suite name="My suite" parallel="classes" thread-count="5">
<suite name="My suite" parallel="instances" thread-count="5">