У меня есть метод, который запускает поток, и я хочу иметь блок метода, пока поток не завершит свою стадию установки, или пока не столкнется с состоянием гонки.
Я знаю, что хочу использовать ожидание, но я не знаю, как владеть монитором и так далее.
Обычно я использую Защелку обратного отсчета , если ждать нужно только начальному потоку.
Там есть примеры, но я могу привести быстрый пример, если вам это нужно.
Или вы можете использовать барьер , если несколько потоков могут использовать поток и должны знать, когда он инициализируется.
Переместите «этап установки» из run() в метод init().
run()
init()
MyRunnableClass mrc = new MyRunnableClass(); mrc.init(); Thread t = new Thread(mrc); t.start();
Редактировать: Или, как заметил @Buhb в комментариях ниже, просто поместите его в конструктор. Годы C ++ заставляют старые привычки умирать.