Java 中的线程状态机
-
19-09-2019 - |
题
有没有办法将线程保持在等待更改的状态?我的意思是等待tll发生的事情(更改var,呼叫方法等。)也许需要使用事件侦听器或同步对象/方法。
像这样的状态机的常用方法
它使用 do{..}while(true) 循环,可以适用于单线程(并且没有 GUI)应用程序,但它不能与线程一起使用。(至少你想为每个线程状态机使用一个核心)
因此,为了避免处理器摄入任务的简单(和丑陋)的方式是“定期检查器”,我的意思是添加睡眠其他想法是定义同步对象,并使用等待而不是线程睡眠
例子:
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 内发生的任何事情都是不可见的
我想知道其他想法,谢谢!
解决方案
是的,你会使用wait
/ notify
。这是它是什么。
或者你的状态机并不需要有自己的线程。其他线程可以调用状态机的update
方法时一些有趣的事情发生了。
其他提示
如果你在Umple指定的排队强>状态机然后将你产生用于此的代码。指定具体的排队状态umple机创建等待事件(命名为方法调用)的螺纹。类中的其他代码可以在原来的线程(S)同时发生。关键字“排队”应该只在状态机的定义之前被放置。
请参阅 http://statemachines.umple.org 获得有关在Umple创建状态机的详细信息。你可以考虑Umple刚刚为Java的预处理器(以及其他语言)在这种情况下。
您还可以使用锁定和 健康)状况 (Java 1.5+)。就像是 wait/notify
javadoc中有一个例子
不隶属于 StackOverflow