tiempo - Ejecución concurrente de tareas programadas en Java
tareas programadas+java+quartz (2)
Te recomendaría que newCachedThreadPool(ThreadFactory threadFactory)
Executors.newCachedThreadPool()
o newCachedThreadPool(ThreadFactory threadFactory)
con tu propia fábrica de hilos, en conjunción con Timer. Entonces el código debería verse así
Executor executor = Executors.newCachedThreadPool();
Timer time = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
executor.execute(new Runnable() {
public void run() {
//your business logic
}
});
}
}, delay, period);
De esta forma, programaría tareas con un cierto período y todas se ejecutarían simultáneamente.
Tengo un TimerTask que está diseñado para recopilar métricas en un intervalo específico. Sin embargo, es posible que el período de ejecución de la tarea sea inferior al tiempo de ejecución de la tarea (ocasionalmente, si se agota el tiempo y se retrasa).
¿Hay alguna forma de ejecutar múltiples TimerTasks o Runnables, Threads, etc. al mismo tiempo sin esperar a que se complete la tarea anterior?
Sé que Timer usa un único hilo, y el ScheduledThreadPoolExecutor retrasará la ejecución independientemente de la velocidad.
Gracias.
Use cualquier implementación de temporizador, incluido ScheduledThreadPoolExecutor, pero deje que su tarea de temporizador no ejecute su lógica comercial, sino que inicie rápidamente otra tarea (en un grupo de subprocesos en caché o en su propio subproceso creado recientemente) que realmente hace cálculos pesados.