Tengo una función específica que quiero ejecutar después de 5 segundos. ¿Cómo puedo hacer eso en Java?
Encontré javax.swing.timer, pero realmente no puedo entender cómo usarlo. Parece que estoy buscando algo mucho más simple de lo que ofrece esta clase.
Agregue un ejemplo de uso simple.
Respuestas:
EDITAR:
javadoc dice:
fuente
import java.util.Timer; import java.util.TimerTask;
podría hacer más obvio que esto no es asíjavax.swing.Timer
. / Tenga en cuenta que si está utilizando Swing (y en realidad AWT) no debería hacer nada para cambiar los componentes en los subprocesos de subproceso de subproceso (EDT) que no son eventos (java.util.Timer
tareas malas;javax.swing.Timer
acciones buenas).cancel
método del temporizador al final del método de ejecución eliminaría el hilo de ejecución de TimerTasks.Algo como esto:
Hay varios otros métodos de fábrica en los
Executor
que puede utilizar en su lugar, si desea más subprocesos en el grupo.Y recuerde, es importante cerrar el ejecutor cuando haya terminado. El
shutdown()
método cerrará limpiamente el grupo de subprocesos cuando se haya completado la última tarea y se bloqueará hasta que esto suceda.shutdownNow()
terminará el grupo de subprocesos inmediatamente.fuente
Ejemplo de uso
javax.swing.Timer
Este código solo se ejecutará una vez y la ejecución se realizará en 3000 ms (3 segundos).
Como menciona camickr, debe buscar " Cómo usar los temporizadores de oscilación " para una breve introducción.
fuente
Mi código es el siguiente:
fuente
Como una variación de @tangens, responda: si no puede esperar a que el recolector de basura limpie su hilo, cancele el temporizador al final de su método de ejecución.
fuente
Timer t
debería declararsefinal
ya que se accede a él dentro de una clase interna?Su pregunta original menciona el "Temporizador de oscilación". Si, de hecho, su pregunta está relacionada con SWing, entonces debería usar el Swing Timer y NO el util.Timer.
Lea la sección del tutorial de Swing sobre " Cómo usar temporizadores " para obtener más información.
fuente
podrías usar la función Thread.Sleep ()
Su función se ejecutará después de 4 segundos. Sin embargo, esto podría pausar todo el programa ...
fuente
ScheduledThreadPoolExecutor
tiene esta habilidad, pero es bastante pesado.Timer
también tiene esta habilidad pero abre varios hilos incluso si se usa solo una vez.Aquí hay una implementación simple con una prueba (firma cercana al Handler.postDelayed () de Android ):
Prueba:
fuente
while
es solo ignorar la interrupción.Todas las demás respuestas requieren ejecutar su código dentro de un nuevo hilo. En algunos casos de uso simple, es posible que desee esperar un poco y continuar la ejecución dentro del mismo hilo / flujo.
El siguiente código demuestra esa técnica. Tenga en cuenta que esto es similar a lo que hace java.util.Timer debajo del capó, pero más liviano.
Implementación DelayUtil
fuente
fuente