Articles of executorservice

Ejecutores Java: ¿cómo puedo detener las tareas enviadas?

He enviado una tarea utilizando ejecutores y necesito que se detenga después de un tiempo (por ejemplo, 5 minutos). He intentado hacer esto: for (Future fut : e.invokeAll(tasks, 300, TimeUnit.SECONDS)) { try { fut.get(); } catch (CancellationException ex) { fut.cancel(true); tasks.clear(); } catch(ExecutionException ex){ ex.printStackTrace(); //FIXME: gestita con printstack } } Pero siempre obtengo un […]

¿Cómo usar invokeAll () para permitir que todos los subprocesos hagan su tarea?

ExecutorService pool=Executors.newFixedThreadPool(7); List<Future> future=new ArrayList<Future>(); List<Callable> callList = new ArrayList<Callable>(); for(int i=0;i<=diff;i++){ String str="2013-"+(liDates.get(i).get(Calendar.MONTH)+1)+"-"+liDates.get(i).get(Calendar.DATE); callList.add(new HotelCheapestFare(str)); } future=pool.invokeAll(callList); for(int i=0;i<=future.size();i++){ System.out.println("name is:"+future.get(i).get().getName()); } Ahora quiero que pool invokeAll la tarea antes de llegar al ciclo for, pero cuando ejecuto este progtwig for loop se ejecuta antes que invokeAll y lanza esta excepción: java.util.concurrent.ExecutionException: java.lang.NullPointerException at […]

Convirtiendo un ExecutorService a daemon en Java

Estoy usando un ExecutoreService en Java 1.6, iniciado simplemente por ExecutorService pool = Executors.newFixedThreadPool(THREADS). Cuando finalice el hilo principal (junto con todas las tareas procesadas por el grupo de subprocesos), este grupo evitará que mi progtwig se cierre hasta que llame explícitamente pool.shutdown(); ¿Puedo evitar tener que llamar a esto de alguna manera convirtiendo la […]

Bloque ThreadPoolExecutor cuando la cola está llena?

Estoy tratando de ejecutar muchas tareas usando un ThreadPoolExecutor. A continuación se muestra un ejemplo hipotético: def workQueue = new ArrayBlockingQueue(3, false) def threadPoolExecutor = new ThreadPoolExecutor(3, 3, 1L, TimeUnit.HOURS, workQueue) for(int i = 0; i < 100000; i++) threadPoolExecutor.execute(runnable) El problema es que obtengo rápidamente una java.util.concurrent.RejectedExecutionException ya que el número de tareas excede […]

Java: ExecutorService que bloquea el envío después de un determinado tamaño de cola

Estoy tratando de codificar una solución en la que una única hebra produce tareas intensivas de E / S que se pueden realizar en paralelo. Cada tarea tiene importantes datos en memoria. Así que quiero poder limitar el número de tareas pendientes en un momento. Si creo ThreadPoolExecutor de esta manera: ThreadPoolExecutor executor = new […]

Java ExecutorService: awaitTermination de todas las tareas creadas recursivamente

Uso un ExecutorService para ejecutar una tarea. Esta tarea puede crear recursivamente otras tareas que se envían al mismo ExecutorService y esas tareas secundarias también pueden hacer eso. Ahora tengo el problema de que quiero esperar hasta que se hayan completado todas las tareas (es decir, todas las tareas hayan finalizado y no hayan enviado […]

¿Cuáles son las ventajas de usar un ExecutorService?

¿Cuál es la ventaja de utilizar ExecutorService sobre la ejecución de subprocesos pasando un Runnable al constructor Thread ?

¿Cómo cerrar un ExecutorService?

Cada vez que llamo shutdownNow() o shutdown() no se apaga. Leí algunos hilos en los que decía que el cierre no está garantizado. ¿Alguien puede proporcionarme una buena forma de hacerlo?

FixedThreadPool vs CachedThreadPool: el menor de dos males

Entonces tengo un progtwig que engendra hilos (~ 5-150) que realizan un montón de tareas. Originalmente, utilicé FixedThreadPool porque esta pregunta similar sugería que eran más adecuados para tareas de mayor duración y, dado mi conocimiento muy limitado sobre el multihilo, consideré que la vida media de los hilos (varios minutos) era ” larga duración […]

¿Imposible crear un grupo de subprocesos en caché con un límite de tamaño?

Parece imposible crear un grupo de subprocesos en caché con un límite en la cantidad de subprocesos que puede crear. Así es como se implementa Executors.newCachedThreadPool estático en la biblioteca estándar de Java: public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue()); } Entonces, usando esa plantilla para continuar creando un […]