java - 如何中断 Java 中的一系列程序?

标签 java multithreading exception lejos-nxj

我有一堆程序需要连续执行,直到它们全部执行或满足某个条件。以下是满足条件之前需要执行的基本代码:

public boolean search()
{
    robot.go();

    robot.spin();

    //etc - around 8 more similar commands (each takes around 2 seconds)
    return false; //didn't find what it was looking for
}

到目前为止,我想到做我想做的事情的唯一方法是:

public boolean search()
{
    robot.go(false);
    while(robot.isMoving())
    {
        if(thingFound())
        {
            robot.stop()
            return true;
        }
        Thread.yield();
    }

    robot.spin(false);
    while(robot.isMoving())
    {
        if(thingFound())
        {
            robot.stop()
            return true;
        }
        Thread.yield();
    }


    //etc - around 8 more similar commands
    return false; //didn't find what it was looking for
}

go()spin()false 参数表示它们应该立即返回,从而允许检查条件。然而,这种方法让我觉得效率相当低,因为同一个代码块必须重复 10 次。通过异常或并发线程可以更有效地实现这一点吗?

最佳答案

不确定为什么要使用Thread.yield() - 是否还有其他您没有提到的线程正在执行?或者也许我误解了这个问题。

我想也许命令模式可以在这里工作。您将拥有一个带有 execute 方法的 RobotCommand 接口(interface),以及每个命令类型(go、spin 等)的 RobotCommand 实现。然后,您可以将 RobotAlgorithm 构造为 RobotCommandList,并使用一个方法 executeRobotAlgorithm 迭代该列表,在每个 RobotCommand 上调用 execute 并在每次调用后检查 thingFound() 的结果。

编辑 - 哦,我想我明白了。 gospin 是否启动改变机器人状态的线程,或者类似的事情?

编辑 2 - 作为对您评论的回应,听起来这里的问题是,如果机器人找到它正在寻找的东西,您需要能够立即返回,但是 go spin 等命令现在无法执行此操作,您需要能够同时继续执行新命令。所以我在这里可能要做的是有两个线程 - 一个是“执行器”线程,它将一一执行您的 RobotCommandList,另一个是“观察者”线程将重复 sleep 和轮询的线程(检查 thingFound())。如果 thingFound() 为 true,那么您可以停止机器人以及执行程序线程,或者如果执行程序在 thingFound() 为 true 之前到达末尾,那么它可以发出这样的信号(如果需要)。

关于java - 如何中断 Java 中的一系列程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2034520/

相关文章:

exception - Python - Python 3.2.2 中的 pythoncom.com_error 处理

java - 如果 JNDI 数据源连接为空,抛出什么异常?

Java Fib迭代和Fib递归时间比较

java - java hdfs客户端是否需要有core-site.xml和hdfs-site.xml才能连接?

java - 我如何动态安排测试由 TestNG 运行?

java - Java嵌套队列

c# - 如何中止使用 ThreadPool.QueueUserWorkItem 创建的线程

java - java中比较两个字符串以忽略大小写和特殊字符?

python - 线程实时记录

java - IntelliJ 在完整的 "tests"运行期间不会因异常而中断?