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

Multithreading Issue - JAVA thread.wait() on method that has to be used

我目前正在研究机器人。我使用 EV3 乐高积木。我的目标是使用方法 travelTo(x,y) 使用最短路径从 A 点行进到 B 点。这个方法在一个名为Drive的线程中,它包含了所有用于控制我的机器人运动的方法(turnTo(double angle),travel(double distance),travelTo(double x,double y),changeSpeed(int newSpeed)。 ..). 我有另一个名为 ObstacleAvoidance 的线程,如果前面有障碍物,它应该停止线程 Drive 并开始使用 P Controller 技术避开障碍物以跟随障碍物。

我的问题是我的 P 控制器使用线程驱动器内部的方法。因此,当我看到障碍物时,我做不到:

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


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

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

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

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

您必须在 Drive 线程中捕获 https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html 并决定接下来要做什么。因为我不知道你的机器人是如何工作的,所以我建议你停止线程。计算完障碍物的处理方法后,可以开始另一个Drive威胁。