una tick parar método metodo hora especifica ejemplo ejecutar detener como java multithreading concurrency timer timertask

tick - Java: espere a que TimerTask se complete antes de continuar la ejecución



timertask android ejemplo (3)

Debería usar la función Thread.sleep lugar de TimeTask para detener la ejecución.

TimerTask no tiene la intención de detener la ejecución, es como un reloj que se ejecuta en segundo plano. Entonces, para su requerimiento, debería ir a Thread.sleep .

Estoy teniendo un problema un poco molesto. En este momento, tengo un fragmento de código que inicia un hilo, establece un temporizador dentro de ese hilo, y luego sale de ese hilo y continúa con su vida útil. Mi intención aquí fue que el programa esperara a que se completara TimerTask antes de continuar con el flujo de código. Sin embargo, obviamente, la configuración de un nuevo TimerTask no detiene la ejecución para esperar a que se agote el temporizador.

¿Cómo configuro esto para que mi código llegue a TimerTask, espere a que caduque TimerTask y luego continúe? ¿Debería incluso estar usando un temporizador en absoluto? He buscado una solución en todas partes, pero parece que no puedo encontrar ninguna.

timer = new Timer(); Thread t = new Thread(new Runnable(){ boolean isRunning = true; public void run() { int delay = 1000; int period = 1000; interval = 10; timerPanel.setText(interval.toString()); //Scheduling the below TimerTask doesn''t wait //for the TimerTask to finish before continuing timer.scheduleAtFixedRate(new TimerTask() { public void run() { timerPanel.setText(setInterval().toString()); } }, delay, period); System.out.println("Thread done."); } }); t.start(); try { t.join(); //doesn''t work as I wanted } catch (InterruptedException e) { e.printStackTrace(); } endTask();

Gracias por adelantado.

EDIT: Perdón por la confusión sobre la tarea repetida. Necesito repetir la tarea porque es un temporizador de cuenta atrás que pulsa cada segundo de 10 a 0. La función setInterval () finalmente cancela el temporizador. Aquí está el código relevante:

private final Integer setInterval() { if (interval == 1) timer.cancel(); return --interval; }


Usa un semáforo. Inicialícela antes de declarar la tarea del temporizador, con 0 permisos. En la tarea del temporizador, use un bloque try / finally para liberar el semáforo. En el hilo principal, adquiera el permiso del semáforo.

En su código, join funciona según lo especificado, ya que espera a que termine el subproceso. Y no, usar un hilo para esto no es necesario. Si realmente desea bloquear hasta cierto tiempo, no necesita un temporizador. Obtenga la hora actual, calcule los milis hasta el momento futuro y duerma ().


Creo que CountDownLatch hará lo que quieras.

final CountDownLatch latch = new CountDownLatch(10); int delay = 1000; int period = 1000; timerPanel.setText(Long.toString(latch.getCount())); timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { latch.countDown(); timerPanel.setText(Long.toString(latch.getCount())); } }, delay, period); try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } timer.cancel();