有没有办法将线程保持在等待更改的状态?我的意思是等待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中有一个例子

scroll top