java javascript timer settimeout setinterval

settimeout javascript



¿Cuál es el equivalente de javascript setTimeout en Java? (7)

Necesito implementar una función para ejecutar luego de 60 segundos de hacer clic en un botón. Por favor ayuda, utilicé la clase Timer, pero creo que esa no es la mejor manera.


Deberías usar el método Thread.sleep() .

try { Thread.sleep(60000); callTheFunctionYouWantTo(); } catch(InterruptedException ex) { }

Esto esperará 60,000 milisegundos (60 segundos) y luego ejecutará las siguientes declaraciones en su código.


Simplemente puede usar Thread.sleep() para este propósito. Pero si está trabajando en un entorno multiproceso con una interfaz de usuario, querrá realizar esto en una secuencia separada para evitar que la suspensión bloquee la interfaz de usuario.

try{ Thread.sleep(60000); // Then do something meaningful... }catch(InterruptedException e){ e.printStackTrace(); }


Implementación asincrónica con JDK 1.8 :

public static void setTimeout(Runnable runnable, int delay){ new Thread(() -> { try { Thread.sleep(delay); runnable.run(); } catch (Exception e){ System.err.println(e); } }).start(); }

Para llamar con la expresión lambda:

setTimeout(() -> System.out.println("test"), 1000);

O con la referencia de método:

setTimeout(anInstance::aMethod, 1000);

Para tratar con el hilo en ejecución actual solo use una versión síncrona:

public static void setTimeoutSync(Runnable runnable, int delay) { try { Thread.sleep(delay); runnable.run(); } catch (Exception e){ System.err.println(e); } }

Úselo con precaución en el hilo principal: suspenderá todo después de la llamada hasta que expire el timeout y se ejecute runnable .


Usé la clase Timer, pero creo que esa no es la mejor manera.

Las otras respuestas suponen que no está utilizando Swing para su interfaz de usuario (botón).

Si está utilizando Swing, entonces no use Thread.sleep() ya que congelará su aplicación Swing.

En su lugar, debe usar un javax.swing.Timer .

Consulte el tutorial de Java Cómo usar Swing Timers y Lesson: Concurrency in Swing para obtener más información y ejemplos.


No use Thread.sleep o congelará su hilo principal y no simulará setTimeout de JS. Necesita crear e iniciar un nuevo hilo de fondo para ejecutar su código sin detener la ejecución del hilo principal. Me gusta esto:

new Thread() { @Override public void run() { try { this.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } // your code here } }.start();



Hay un método setTimeout() en la biblioteca underscore-java .

Ejemplo de código:

import com.github.underscore.$; import com.github.underscore.Function; public class Main { public static void main(String[] args) { final Integer[] counter = new Integer[] {0}; Function<Void> incr = new Function<Void>() { public Void apply() { counter[0]++; return null; } }; $.setTimeout(incr, 100); } }

La función se iniciará en 100 ms con un nuevo hilo.