Есть ли способ удержания потока в состоянии ожидания изменений?
Я имею в виду подождать, пока что-то случится (изменить var, вызвать метод и т. Д.)
возможно, для этого нужно использовать прослушиватели событий или синхронизированные объекты / методы.
Обычный подход к государственным машинам, подобным этому
пример состояния машины
Использует цикл do {..} while (true), который может работать для однопоточного (и без GUI) приложения, но он НЕ МОЖЕТ использоваться с потоками.
(по крайней мере, вы хотите использовать ядро для каждого конечного автомата)
Таким образом, чтобы избежать этой задачи, потребляющей процессор, простым (и уродливым) способом
это «периодическая проверка», я имею в виду добавление сна
другая идея - определить синхронизированный объект и использовать ожидание вместо потока Sleep
пример:
do{
Switch(state)
{
case STATE_A:
//..A things
break;
case STATE_B:
//..B things
break;
...
case STATE_Z:
//..Z things
break;
}
// Here! => wait()? Thread.sleep(TIME_CONST)? //Hold and yield
}while(powerOn);
Недостатком является сложность при использовании синхронизированных или то, что все, что происходит в TIME_CONST, будет невидимым
Я хотел бы знать другие идеи для этого,
спасибо!