Últimamente he estado usando bucles con números grandes para imprimir Hello World
:
int counter = 0;
while(true) {
//loop for ~5 seconds
for(int i = 0; i < 2147483647 ; i++) {
//another loop because it's 2012 and PCs have gotten considerably faster :)
for(int j = 0; j < 2147483647 ; j++){ ... }
}
System.out.println(counter + ". Hello World!");
counter++;
}
Entiendo que esta es una forma muy tonta de hacerlo, pero nunca he usado ninguna biblioteca de temporizadores en Java todavía. ¿Cómo se modificaría lo anterior para imprimir cada 3 segundos, por ejemplo?
Respuestas:
También puede echar un vistazo a
Timer
yTimerTask
clases que se pueden utilizar para programar su tarea para ejecutar cadan
segundo.Necesita una clase que amplíe
TimerTask
y anule elpublic void run()
método, que se ejecutará cada vez que pase una instancia de esa clase altimer.schedule()
método.Aquí hay un ejemplo, que imprime
Hello World
cada 5 segundos: -fuente
schedule
método de 2 parámetros se ejecutará una vez después del retraso especificado. El 3-paramschedule
oscheduleAtFixedRate
necesitaría ser usado.ExecutorService
para estas tareas. Esa es realmente una gran mejora con respecto a la API Thread tradicional. Simplemente no lo usé al momento de responder.Timer timer = new Timer(true);
debe establecersetrue
como un demonio. A menos que desee que el temporizador siga ejecutándose después de cerrar la aplicación.Si desea hacer una tarea periódica, use a
ScheduledExecutorService
. Específicamente ScheduledExecutorService.scheduleAtFixedRateEl código:
fuente
TimerTask
variante. Curiosamente, noté que la respuesta aceptada en realidad no es correcta: \ La edad de las dos API a un lado,ScheduledExecutorService
es simplemente más intuitiva y declarativa. El uso deTimeUnit
como parámetro deja mucho más claro lo que está ocurriendo. Atrás quedaron los días de código como5*60*1000 // 5 minutes
.Runnable helloRunnable = () -> { /*code */ };
que es aún más hermoso;)Intenta hacer esto:
Este código ejecutará print para consolar Hello World cada 5000 milisegundos ( 5 segundos). Para obtener más información, lea https://docs.oracle.com/javase/1.5.0/docs/api/java/util/Timer.html
fuente
Lo resuelvo con un temporizador, espero que ayude. He usado un temporizador desde
java.util.Timer
yTimerTask
desde el mismo paquete. Vea abajo:fuente
Puedes usar
Thread.sleep(3000)
dentro para loop.Nota: Esto requerirá un
try/catch
bloqueo.fuente
se crea un bucle infinito y se configura la tarea del planificador de anuncios.
fuente
La forma más fácil sería configurar el hilo principal para que duerma 3000 milisegundos (3 segundos):
Esto detendrá el hilo al menos X milisegundos. El hilo podría estar durmiendo más tiempo, pero eso depende de la JVM. Lo único garantizado es que el hilo dormirá al menos esos milisegundos. Echa un vistazo al
Thread#sleep
documento:fuente
El uso
java.util.Timer
y elTimer#schedule(TimerTask,delay,period)
método te ayudarán.fuente
Esta es la forma simple de usar hilo en java:
fuente
Lo que dijo. Puede manejar las excepciones como quiera, pero Thread.sleep (milisegundos); Es la mejor ruta a seguir.
fuente
Aquí hay otra forma simple de usar la interfaz Runnable en Thread Constructor
fuente
Añadir
Thread.sleep
fuente
Para aplicaciones pequeñas está bien usar Timer y TimerTask como mencionó Rohit, pero en aplicaciones web usaría Quartz Scheduler para programar trabajos y realizar dichos trabajos periódicos.
Ver tutoriales para la programación de cuarzo.
fuente
fuente