Как я могу попросить поток сообщить методу, который его запустил, когда завершил настройку? - PullRequest
1 голос
/ 17 апреля 2011

У меня есть метод, который запускает поток, и я хочу иметь блок метода, пока поток не завершит свою стадию установки, или пока не столкнется с состоянием гонки.

Я знаю, что хочу использовать ожидание, но я не знаю, как владеть монитором и так далее.

Ответы [ 2 ]

5 голосов
/ 17 апреля 2011

Обычно я использую Защелку обратного отсчета , если ждать нужно только начальному потоку.

Там есть примеры, но я могу привести быстрый пример, если вам это нужно.

Или вы можете использовать барьер , если несколько потоков могут использовать поток и должны знать, когда он инициализируется.

4 голосов
/ 17 апреля 2011

Переместите «этап установки» из run() в метод init().

MyRunnableClass mrc = new MyRunnableClass();
mrc.init();
Thread t = new Thread(mrc);
t.start();

Редактировать: Или, как заметил @Buhb в комментариях ниже, просто поместите его в конструктор. Годы C ++ заставляют старые привычки умирать.

...