Mi computadora tiene 4 núcleos y estoy ejecutando un programa Java gui de oscilación. Cuando ejecuto mi aplicación, solo utiliza dos núcleos y aproximadamente el 30% de utilización de la CPU. Tengo una gran cantidad de archivos para procesar y quiero dividirlos en dos hilos para hacer esta tarea más rápido usando más cpu.Instancias de Swingworker que no se ejecutan al mismo tiempo
tengo una clase SwingWorker llamada PrepareTask, que tiene un constructor con dos enteros:
class PrepareTask extends SwingWorker<Void, Void> {
int start, end;
PrepareTask (int start, int end) { ... }
...
public Void doInBackground() {... }
public void done() { ... }
puedo crear dos instancias de este como:
PrepareTask prepareTask = new PrepareTask(0,numberOfFiles/2);
prepareTask.execute();
PrepareTask prepareTask2 = new PrepareTask(numberOfFiles/2, numberOfFiles);
prepareTask2.execute();
Ambos se lanzaron (parece), pero cuando se ejecuta, puedo ver (imprimir stmts) que la primera preparación tiene que terminar (imprima stmts dentro) antes de que comience la segunda. Y la utilización de la CPU es la misma que antes, alrededor del 30%. Ambos, por supuesto, toman datos de la misma fuente, un DefaultTableModel.
¿Alguna idea sobre cómo hacer esto o lo que estoy haciendo mal? gracias.
Tenga en cuenta que si la mayor parte del tiempo de procesamiento implica acceso a archivos, entonces tener muchos hilos no necesariamente lo hará más rápido porque el disco se convertirá en su cuello de botella. ¿Puede desarrollar aún más el tipo de procesamiento que realiza en estos archivos? – jfpoilpret