Получение значения из потока, запущенного в цикле 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();

        }
Другие вопросы по тегам