Subprocesamiento múltiple con Java Executor

Estoy atrapado con el siguiente problema. Digamos, tengo una solicitud que tiene 1000 elementos, y me gustaría utilizar Java Executor para resolver esto.

Aquí está el método principal.

public static void main(String[] args) {

     //Assume that I have request object that contain arrayList of names
     //and VectorList is container for each request result

     ExecutorService threadExecutor = Executors.newFixedThreadPool(3);
     Vector<Result> vectorList = new Vector<Result();

     for (int i=0;i<request.size();i++) {
          threadExecutor.execute(new QueryTask(request.get(i).getNames, vectorList)
     }

      threadExecutor.shutdown();

      response.setResult(vectorList)

}

Y aquí está la clase QueryTask

public QueryTask() implements Runnable {

    private String names;
    private Vector<Result> vectorList;

    public QueryTask(String names, Vector<Result> vectorList) {
          this.names = names;
          this.vectorList = vectorList;
    }

    public void run() {
         // do something with names, for example, query database
         Result result = process names;

         //add result to vectorList
         vectorList.add(result);
    }


}

Entonces, según el ejemplo anterior, quiero hacer un grupo de subprocesos para cada dato que tengo en la solicitud, ejecutarlo simultáneamente y agregar resultados a VectorList. Y al final del proceso, quiero tener todo el resultado ya en la lista de vectores.

Sigo obteniendo resultados inconsistentes en la respuesta. Por ejemplo, si paso la solicitud con 10 nombres, obtengo solo 3 o 4, o algunas veces nada en la respuesta. Esperaba que si pasaba 10, obtendría 10 de vuelta.

¿Alguien sabe cuál es la causa del problema?

Cualquier ayuda será apreciada.

Gracias

Respuesta 1

Recientemente he estado jugando con Bicubic Interpolation, ya que quiero generar la tierra, basada en mapas de altura reales dentro de Minecraft. La razón por la que estoy usando la interpolación es porque yo ...

Estoy usando Ubuntu 10.10 amd64, Sun JDK 6.0.24 y el paquete ghostscript predeterminado. Ahora, estoy tratando de que funcione la muestra "Renderizar un documento PDF usando SimpleRenderer" de la página Ghost4J. Mientras ...

Como ejercicio de aprendizaje personal, escribí esta expresión regular para dividir una cadena unaria en partes cuya longitud aumenta los poderes de dos (ver también en ideone.com): for (String s: new String (new ...

Conocí en nuestro proyecto el siguiente código: MyInterface var = MyClass :: new; ¿Hay alguna diferencia con MyInterface var = new MyClass (); ¿Perezoso?