从在while循环中运行的线程获取价值

时间:2019-02-19 13:59:50

标签: multithreading java-threads

我有一个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 :(得分:0)

这是因为您没有给线程足够的时间来初始化计划Arraylist。您需要为线程增加睡眠时间。从main调用BotThread类时会发生以下情况:

     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();

        }