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

多线程问题-必须使用的方法上的JAVA thread.wait(),java,multithreading,robotics,lejos-nxj,Java,Multithreading,Robotics,Lejos Nxj,我目前正在研制一个机器人。我用的是EV3乐高积木。我的目标是使用最短路径的方法travelTo(x,y)从A点移动到B点。这个方法在一个线程名驱动器中,它包含了所有用于控制我的机器人运动的方法(旋转(双角度)、移动(双距离)、移动(双x、双y)、变速(int新闻速度)…)。 我有另一个线程叫做ObstacleAvoidance,如果前面有障碍物,它应该停止线程驱动,并开始使用P控制器技术来跟踪障碍物来避免障碍物 我的问题是我的p控制器在线程驱动器中使用方法。因此,当我看到障碍时,我无法做到: i

我目前正在研制一个机器人。我用的是EV3乐高积木。我的目标是使用最短路径的方法travelTo(x,y)从A点移动到B点。这个方法在一个线程名驱动器中,它包含了所有用于控制我的机器人运动的方法(旋转(双角度)、移动(双距离)、移动(双x、双y)、变速(int新闻速度)…)。 我有另一个线程叫做ObstacleAvoidance,如果前面有障碍物,它应该停止线程驱动,并开始使用P控制器技术来跟踪障碍物来避免障碍物

我的问题是我的p控制器在线程驱动器中使用方法。因此,当我看到障碍时,我无法做到:

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


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

我怎样才能绕过这个问题呢?换句话说,如何停止我的机器人的当前操作,避免阻塞,然后继续我正在做的事情?

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


您必须捕获驱动器线程中的线程,然后决定执行什么操作。因为我不知道你的机器人是如何工作的,我建议你停止线程。在计算如何处理障碍物后,您可以启动另一个驱动器威胁。

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


您必须捕获驱动器线程中的线程,然后决定执行什么操作。因为我不知道你的机器人是如何工作的,我建议你停止线程。在计算了如何处理障碍后,您可以启动另一个驱动器威胁。

我们在这里讨论的是
java.lang.Thread
s吗?因为你根本不应该在线程对象上调用
wait()
notify()
。方法是在对象上的,无论该对象代表一个线程,都不应该阻止它被另一个线程调用。如果一个线程必须停止另一个线程才能工作,那么为什么要将功能分成两个线程呢?我对机器人技术一无所知,但这让我质疑事物是如何组织的。我们在这里谈论的是
java.lang.Thread
s吗?因为你根本不应该在线程对象上调用
wait()
notify()
。方法是在对象上的,无论该对象代表一个线程,都不应该阻止它被另一个线程调用。如果一个线程必须停止另一个线程才能工作,那么为什么要将功能分成两个线程呢?我对机器人技术一无所知,但这让我质疑事物是如何组织的。