Pues, como se comento anteriormente, hay una funcion en java llamada System.nanoTime, la cual nos devuelve el tiempo transcurrido desde un momento fijo (no se realmente cual sea, lo desconozco completamente), pero esta nos sirve para saber el momento en el que algo ocurrio, y para tu problema especifico, se puede hacer una ejecucion un tanto simple:
a decir verdad, yo prefiero este metodo, ya que, aunque puede ser un tanto mas dificil de leer en ocasiones, evita el usar variables de manera inecesaria, como es el caso de un booleano para salir, ya que podemos declarar el while directamente con la condicion y actualizar al final del mismo ciclo para que no se vuelva infinito