На самом деле, это не только неэффективно, но даже не гарантировано, что оно работает, поскольку в коде, который вы показываете, нет края «происходит до». Чтобы создать ребро случай-до , вам нужно выполнить одно из:
- Доступ к изменяемой переменной
- Синхронизация на общем ресурсе
- Использовать одновременную блокировку утилит.
Как уже упоминалось в другом комментарии, самое простое решение - просто убедиться, что ваш флаг является переменной переменной, и просто бросить короткий сон в цикле.
Однако лучшее, что можно сделать, - это синхронизировать / ждать / уведомлять общую переменную.
Методы, о которых вам нужно прочитать: wait и notify . Для лучшего описания того, как их использовать, прочитайте эту статью . Пример кода приведен ниже;
Тема 1
Object shared = new Object();
startThread2(shared);
synchronized (shared) {
while (taskNotDone())
shared.wait();
}
Резьба 2
// shared was saved at the start of the thread
// do some stuff
markTaskAsDone();
synchronized (shared) {
shared.notify();
}