Я сейчас работаю над роботом. Я использую лего-кирпич EV3. Моя цель — добраться из точки А в точку Б с помощью метода travelTo(x,y) по кратчайшему пути. Этот метод находится в потоке с именем Drive, который содержит все методы, используемые для управления движениями моего робота (turnTo(двойной угол), travel(двойное расстояние), travelTo(двойной x, двойной y), changeSpeed(int newSpeed). ..). У меня есть еще один поток под названием ObstacleAvoidance, который должен остановить поток Drive, если впереди есть препятствие, и начать избегать препятствия, используя технику P Controller, чтобы следовать за препятствием.
Моя проблема в том, что мой P-контроллер использует методы внутри Thread Drive. Поэтому, когда я вижу препятствие, я не могу сделать:
if (obstacle){
Drive.wait();
while(isAvoiding){
pControler();
}
}
Drive.Notify();
private void pController(){
//use methods inside the DriveThread
}
Как я могу обойти эту проблему? Другими словами, как я могу остановить текущее действие моего робота, избежать блокировки и затем продолжить то, что я делал?
java.lang.Thread
s здесь? Потому что вы вообще не должны вызыватьwait()
иnotify()
для объектов потока. - person biziclop   schedule 20.11.2016