Потоки

Все методы в ApplicationListener вызываются в одном и том же потоке. Этот поток является потоком визуализации, в котором делаются OpenGL вызовы. Для большинства игр этого достаточно, чтобы реализовать обновление логики и визуализации в render() методе ApplicationListener интерфейса и в потоке визуализации.

Любые операции связанные с графикой и прямым участием OpenGL, должны быть выполнены в потоке визуализации. Делая это в другом потоке, вы можете вызвать не предсказуемое поведение приложения. Это связано с тем, что контекст OpenGL находится в активном состоянии только в потоке визуализации. Смена текущего контекста в других потоках имеет проблемы на множестве Android устройств, поэтому визуализации в другом потоке не поддерживается.

Для передачи данных в поток визуализации из другого потока рекомендуется использовать postRunnable() метод из Application. Этим самым выполнение кода будет в Runnable и в потоке визуализации при следующем кадре, но перед вызовом render() метода ApplicationListener интерфейса.

new Thread(new Runnable() {
   @Override
   public void run() {
      // выполнение чего-либо важного асинхронно потока визуализации
      final Result result = createResult();
      // передача Runnable в поток визуализации, который обработает результат
      Gdx.app.postRunnable(new Runnable() {
         @Override
         public void run() {
            // обработка результата, например добавление в Array<Result> поле ApplicationListener.
            results.add(result);
         }
      });
   }
}).start();

HTML5

По своей сути Javascript является однопоточным. Таким образом, многопоточность не возможна. В будущем, одним из вариантов может быть Web Workers, однако данные между потоками передаются через сообщения. Java использует другие примитивы и механизмы, поэтому перенос кода для Web Workers будет не столь прямым.