Получение значения из потока, запущенного в цикле while
У меня есть поток Java, который запускает алгоритм поиска пути в константе while. Затем, каждый раз, я хочу получить наиболее обновленный путь из потока. Тем не менее, я не уверен, как это сделать, и думаю, что я могу делать это неправильно. Моя ветка состоит из следующего кода:
public class BotThread extends Thread {
Bot bot;
AStar pathFinder;
Player targetPlayer;
public List<boolean[]> plan;
public BotThread(Bot bot) {
this.bot = bot;
this.plan = new ArrayList<>();
pathFinder = new AStar(bot, bot.getLevelHandler());
}
public void run() {
while (true) {
System.out.println("THREAD RUNNING");
targetPlayer = bot.targetPlayer;
plan = pathFinder.optimise(targetPlayer);
}
}
public boolean[] getNextAction() {
return plan.remove(0);
}
}
Затем я создаю объект BotThread и вызываю start(). Затем, когда я вызываю getNextAction() в потоке, я получаю нулевой указатель. Это потому, что я не могу вызвать другой метод в потоке, пока он находится в основном цикле? Как я должен сделать это правильно?
1 ответ
Это потому, что вы не уделяете достаточно времени на инициализацию плана Arraylist. Вы должны добавить время сна в потоках. Примерно так во время вызова класса BotThread из main:
int num_threads = 8;
BotThread myt[] = new BotThread[num_threads];
for (int i = 0; i < num_threads; ++i) {
myt[i] = new BotThread();
myt[i].start();
Thread.sleep(1000);
myt[i].getNextAction();
}