Ejecute la función Java cada hora

Quiero ejecutar una función cada hora, para enviar por correo electrónico a los usuarios una captura de pantalla de su progreso cada hora. Codifiqué la configuración para hacerlo en una función llamada sendScreenshot ()

¿Cómo puedo ejecutar este temporizador en segundo plano para llamar a la función sendScreenshot () cada hora, mientras el resto del programa se está ejecutando?

Aquí está mi código:

public int onLoop() throws Exception{
    if(getLocalPlayer().getHealth() == 0){
        playerHasDied();
    }
    return Calculations.random(200, 300);

}

public void sendScreenShot() throws Exception{
    Robot robot = new Robot();
    BufferedImage screenshot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
    screenshotNumber = getNewestScreenshot();
    fileName = new File("C:/Users/%username%/Dreambot/Screenshots/Screenshot" + screenshotNumber +".");
    ImageIO.write(screenshot, "JPEG", fileName);

    mail.setSubject("Your hourly progress on account " + accName);
    mail.setBody("Here is your hourly progress report on account " + accName +". Progress is attached in this mail.");
    mail.addAttachment(fileName.toString());
    mail.setTo(reciepents);
    mail.send();

}

Respuestas a la pregunta(4)

Su respuesta a la pregunta