変更を待機している状態でスレッドを保持する方法はありますか?つまり、何かが発生するまで待つことを意味します(varの変更、メソッドの呼び出しなど)。おそらく、イベントリスナー、または同期されたオブジェクト/メソッドを使用する必要があります。
このようなステートマシンの通常のアプローチ
これは、シングルスレッド(およびGUIなし)アプリケーションで機能するdo {..} while(true)ループを使用しますが、スレッドでは使用できません..(少なくともすべてのスレッドステートマシンにコアを使用する必要があります) )。
したがって、プロセッサがタスクを消費することを避けるために、単純な(そして醜い)方法は「定期的なチェッカー」です。つまり、Sleepを追加することは、同期されたオブジェクトを定義し、スレッドSleepの代わりにwaitを使用することです。
例:
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内で発生するものがすべて表示されないことです。
これを行うための他のアイデアを知りたいのですが、ありがとう!