Получение значения из потока, запущенного в цикле while - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть поток 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 Ответ

0 голосов
/ 20 февраля 2019

Это потому, что вы не даете достаточно времени для инициализации плана 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();

        }
...