Как ждать потока, который порождает свой собственный поток?
Я пытаюсь проверить метод, который работает в отдельном потоке, упрощенно это так:
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
после утверждения.
Как сделать так, чтобы первый поток ожидал запускаемого потока?а также любые потоки, которые запускает этот поток?