ScheduledExecutorService un hilo de muchas de las tareas que

Soy nuevo en ExecutorService y me pregunto por qué siguiente código imprime correctamente “10 de 15”, a pesar de que he creado un solo hilo de ejecución para el proceso de los tiempos de espera? ¿Por qué puedo llamar a programar muchas veces sin previo tareas que se cancela en un solo hilo ejecutor?

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TestExecutorService implements Runnable {
public static ScheduledExecutorService SERVICE = Executors.newSingleThreadScheduledExecutor();
private int delay;
public TestExecutorService(int delay) {
this.delay = delay;
}
public void run () {
System.out.println(delay);
}
public static void main (String[] args) {
SERVICE.schedule(new TestExecutorService(10), 10, TimeUnit.SECONDS);
SERVICE.schedule(new TestExecutorService(15), 15, TimeUnit.SECONDS);
SERVICE.shutdown();
}
}
un adicional de leer code.nomad-labs.com/2011/12/09/…

OriginalEl autor Nikolay Kuznetsov | 2012-12-18

2 respuestas

  1. 8

    La lectura de la Javadoc sería muy útil en este caso. Explicar que a pesar de que el albacea va a ser creado con un solo hilo, que funcionará con un ilimitado cola. Esto significa que usted puede presentar múltiples tareas que el ejecutor y se pondrán en cola para que se ejecute una después de la otra, hasta el máximo de los límites de la cola (que en este caso es infinito) o hasta que la JVM ejecuta fuera de los recursos.

    Crea un Albacea que utiliza un único subproceso de trabajo operativo fuera un
    sin límites de la cola. (Tenga en cuenta, sin embargo, que si este hilo termina
    debido a un error durante la ejecución antes de la parada, un nuevo
    tomar su lugar si es necesario para ejecutar las tareas posteriores.) Las tareas son
    garantizado para ejecutar de forma secuencial, y no hay más que una de sus tareas será
    activa en cualquier momento. A diferencia de la otra forma equivalente
    newFixedThreadPool(1) devuelve el albacea es la garantía de que no se
    reconfigurable para el uso de subprocesos adicionales.

    En su ejemplo, sus dos tareas se colocan en la cola, y se ejecutan de forma secuencial una después de la otra, que es la razón por la que usted obtenga el (esperado) de salida.

    así que si muchas de las tareas con el mismo retraso se presenta a continuación algunos de ellos de impresión mucho más tarde?
    Sí, ellos, asumiendo que las tareas que se tome el tiempo suficiente para que usted observe.

    OriginalEl autor Perception

  2. 8

    De la Javadocs:

    Tareas están garantizados para ejecutar de forma secuencial, y no más de una tarea se activa en cualquier momento.

    La diferencia entre “el procesamiento de los tiempos de espera” y “la ejecución de la tarea” es la clave de la respuesta. Se asume que el “single-threaded” significa “procesamiento de sólo un tiempo de espera en un tiempo”, pero en realidad significa “ejecutar sólo una tarea a la vez”. Todos los tiempos son procesadas simultáneamente, pero si el tiempo de espera de uno es alcanzado antes de una tarea deja de ejecutar, tendrá que esperar para el otro para terminar antes de que se pueda ejecutar.

    OriginalEl autor Brian

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *