多线程问题 - 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威胁。
我目前正在研究机器人。我使用 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威胁。