В настоящее время я работаю над роботом. Я использую кирпич EVO lego. Моя цель - переместиться из точки A в B, используя метод travelTo (x, y), используя кратчайший путь. Этот метод находится в названии потока Drive, в котором содержатся все методы, используемые для управления перемещениями моего робота (turnTo (двойной угол), перемещение (двойное расстояние), travelTo (double x, double y), changeSpeed (int newSpeed). ..). У меня есть еще один поток под названием ObstacleAvoidance, который должен остановить поток Drive, если есть препятствие впереди, и начать избегать препятствия, используя метод P Controller, чтобы следовать за препятствием.Проблема многопоточности - метод JAVA thread.wait(), который должен использоваться
Моя проблема в том, что мой контроллер P использует методы внутри Thread Drive. Поэтому, когда я вижу препятствие, я не могу:
if (obstacle){
Drive.wait();
while(isAvoiding){
pControler();
}
}
Drive.Notify();
private void pController(){
//use methods inside the DriveThread
}
Как я могу обойти эту проблему? Другими словами, как я могу остановить текущее действие моего робота, избежать блока, а затем продолжить то, что я делаю?
Мы говорим о 'java.lang.Thread здесь? Потому что вы не должны называть 'wait()' и 'notify()' на объектах потоков вообще. – biziclop
Методы на объектах, независимо от того, представляет ли этот объект поток, не должен останавливать его от neing, вызванного другим потоком. И зачем расщеплять функциональность на 2 потока, если нужно остановить другую, прежде чем она сможет работать? Я ничего не знаю о робототехнике, но это заставляет меня задаться вопросом, как все организовано. –