I'm making Tower Defence Game using JavaFX, my current problem is updating view after animation calculations. I've tried making new Thread and starting it, but whenever i touch GraphicContext from Canvas, game crashed. My current game loop class looks like:
import model.Enemy;
import model.Map;
import model.Player;
import model.Model;
import view.View;
public class GameLoop2 {
    private Canvas canvas;
    public Integer enemiesNr;
    public Integer enemiesSpawnTime;
    public Integer spawnedEnemies;
    private long lastSpawn;
    private ArrayList<Enemy> enemies;
    private boolean firstPlay;
    private Model model;
    private Map map;
    public GameLoop2(Canvas mainCanvas, Model m) {
        model = m;
        map = model.getMap();
        canvas = mainCanvas;
        enemiesNr = map.getEnemiesNr();
        enemiesSpawnTime = model.getMap().getEnemiesSpawnTime();
        spawnedEnemies = 0;
        lastSpawn = System.currentTimeMillis();
        enemies = new ArrayList<>(enemiesNr);
        for(int i=0; i < enemiesNr;i++)
            enemies.add(i, new Enemy(map.getStartXPosition(), map.getStartXPosition()));
    }
    private void spawnEnemy() {
        if(spawnedEnemies >= enemiesNr)
            return;
        enemies.get(spawnedEnemies).setAlive(true);
        View.drawEnemy(canvas, enemies.get(spawnedEnemies));
        spawnedEnemies++;
        lastSpawn = System.currentTimeMillis();
    }
    private void enemyPhysics() {
        for(Enemy e: enemies)
            if(e.isAlive())
                e.physics(1);
    }
    private void drawEnemies(){
        for(Enemy e: enemies)
            if(e.isAlive())
                View.drawEnemy(canvas,e);
    }
    private void update() {
        canvas.getGraphicsContext2D().restore();
        View.drawMap(map, canvas);
        drawEnemies();
    }
    public void start() {
      while(true){
        // Calculations
        long now = System.currentTimeMillis();
        if (now - lastSpawn > enemiesSpawnTime) {
            spawnEnemy();
        }
        enemyPhysics();
        // Updating View
        update();
        // View is refreshed after break; statement
        if(now - lastSpawn > 6000)
            break;
    }
}
I've also tried Service class, but it didn't worked for me. I would also want to make claculation as fast as possible to make movement animation effect for aproaching enemies. It will be nice to make it in a way that will allow to add another thread, for example background music, or calculating damage to main tower.
