Tengo una aplicación de subprocesos múltiples. Al usar Thread.start() para iniciar manualmente los hilos, cada hilo concurrente usa exactamente un 25% de CPU (o exactamente un núcleo, esto es en una máquina de cuatro núcleos). Entonces, si uso dos hilos, el uso de la CPU es exactamente del 50%.Java: ExecutorService menos eficiente que las ejecuciones de subprocesos manuales?
Sin embargo, cuando se utiliza ExecutorService para ejecutar subprocesos, parece haber un hilo "fantasma" que consume recursos de la CPU. Un hilo utiliza el 50% en lugar del 25%, el uso de dos hilos el 75%, etc.
¿Podría ser este un tipo de artefacto del administrador de tareas de Windows?
Excutor código de servicio es
ExecutorService executor = Executors.newFixedThreadPool(threadAmount);
for (int i = 1; i < 50; i++) {
Runnable worker = new ActualThread(i);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
System.out.println("Finished all threads");
y el código hilo.start() es:
ActualThread one= new ActualThread(2,3);
ActualThread two= new ActualThread(3,4);
...
Thread threadOne = new Thread(one);
Thread threadTtwo = new Thread(two);
...
threadOne.start();
threadTwo.start();
...
¿Dónde está el código para esperar a que los hilos terminen en el segundo ejemplo? –