carregamento – O timer pra contar os FPS não funciona

Tô fazendo um curso tem pouco tempo. Tô bem no começo.
Fui dar uma leve praticada no esquema de abrir uma janela e ao mesmo tempo ter o looping pra render e ticks do jogo, porém, o looping não funciona direito. Não consigo adicionar o timer pra limitar a quantidade de atualizações (ele simplesmente não deixa o looping acontecer. a janela abre mas a mensagem não aparece no console), e quando deixo sem o timer, com o código atualizando em velocidade alta, os números ficam alternando entre 0 e 1.

Aqui está todo o código do programa, caso notem algo que eu não notei:

import java.awt.Canvas;
import java.awt.Dimension;

import javax.swing.JFrame;

public class game extends Canvas implements Runnable {
    
    public static JFrame frame;
    private Thread thread;
    private boolean isRunning = true;
    private final int largura = 160;
    private final int altura = 120;
    private final int escala = 3;
    
    public game() {
        setPreferredSize(new Dimension(largura*escala,altura*escala));
        initFrame();
    }
    
    public void initFrame() {
        frame = new JFrame("FODA DEMAIS A JANELA DOIDO");
        frame.add(this);
        frame.setResizable(true);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    
    public synchronized void start() {
        thread = new Thread(this);
        isRunning = true;
        thread.start();
        
    }
    
    public synchronized void stop() {
        
    }

    public static void main(String args()) {
        
        game game = new game();
        game.start();
        
        
    }
    
    public void tick(){
        
    }
    
    public void render(){
        
    }
    
    public void run() {
        long lastTime = System.nanoTime();
        double qntdTicks = 60.0;
        double ns = 1000000000 / qntdTicks;
        double delta = 0;
        int frames = 0;
        double timer = System.currentTimeMillis();      
        while(isRunning) {
            long now = System.nanoTime();
            delta+= (now - lastTime) / ns;
            lastTime = now;
            if (delta >= 1) {
                tick();
                render();
                frames++;
                delta--;
            }
            if (System.currentTimeMillis() - timer >= 1000)
            System.out.println("Ae boy, o Jogo tá rodando a " +frames);
            frames = 0;
        }
        
    }

}