Как ждать потока, который порождает свой собственный поток?

Я пытаюсь проверить метод, который работает в отдельном потоке, упрощенно это так:

public void methodToTest()
{
    Thread thread = new Thread()
    {
        @Override
        public void run() {
            Clazz.i = 2;
        }
    };
    thread.start();
}

В моем модульном тесте я хочу проверить это Clazz.i == 2, но я не могу этого сделать, потому что я думаю, что assert запускается до того, как поток изменяет значение. Я подумал об использовании другого потока, чтобы протестировать его, а затем использовать объединение, чтобы ждать, но он все еще не работает.

SSCCE:

@Test
public void sscce() throws InterruptedException
{
    Thread thread = new Thread()
    {
        @Override
        public void run() {
            methodToTest()
        }
    };
    thread.start();     
    thread.join();  
    AssertEquals(2, Clazz.i);
}

public static class Clazz
{
    public static int i = 0;
}

Я думаю, это потому, что основной тестовый код создает поток, который ожидает (присоединился) ко 2-му потоку, но 2-й поток не выполняет работу, он создает другой поток для выполнения работы, а затем завершает работу, которая продолжает первый поток, в то время как третий поток делаетClazz.i = 2 после утверждения.

Как сделать так, чтобы первый поток ожидал запускаемого потока?а также любые потоки, которые запускает этот поток?

Ответы на вопрос(3)

Ваш ответ на вопрос