多线程问题 - 必须使用的方法上的JAVA thread.wait()

时间:2016-11-19 21:26:48

标签: java multithreading robotics lejos-nxj

我目前正在研究机器人。我用EV3乐高积木。我的目标是使用方法travelTo(x,y)使用最短路径从A点行进到B.此方法位于线程名称Drive中,其中包含用于控制机器人运动的所有方法(turnTo(双角度),travel(双倍距离),travelTo(double x,double y),changeSpeed(int newSpeed)。 ..)。 我有另一个名为ObstacleAvoidance的线程,如果前方有障碍物并且使用P控制器技术跟踪障碍物开始避开障碍物,则应该停止线程驱动器。

我的问题是我的P控制器使用Thread Drive中的方法。因此,当我看到障碍时,我无法做到:

if (obstacle){    
  Drive.wait();
  while(isAvoiding){
    pControler();
  }
}
Drive.Notify();


private void pController(){
  //use methods inside the DriveThread
}

我该如何解决这个问题?换句话说,我怎样才能停止机器人的当前动作,避开阻挡然后继续我正在做的事情?

1 个答案:

答案 0 :(得分:0)

如果路径中有障碍物,您可以使用Thread.interrupt()中断驱动器线程。然后你可以计算出如何处理障碍物然后再次开车。

https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#interrupt--

您必须抓住云端硬盘线程中的https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html,然后决定该怎么做。由于我不知道你的机器人是如何工作的,我建议只是停止线程。在计算出如何处理障碍物后,您可以启动另一个Drive威胁。