1. ¿Qué es un grupo de subprocesos?
Crear y destruir objetos lleva mucho tiempo
Crear objeto: necesita asignar recursos como memoria
Destrucción de objetos: aunque no es necesario que los programadores se preocupen, el recolector de basura hará un seguimiento y los destruirá en segundo plano.
Los recursos que se crean y destruyen con frecuencia y que usan mucho, como los subprocesos en situaciones concurrentes, tienen un gran impacto en el rendimiento.
Idea: cree varios subprocesos, colóquelos en el grupo de subprocesos, obtenga referencias directamente cuando se usen y vuelva a colocarlos en el grupo cuando no estén en uso. Puede evitar la creación y destrucción frecuentes, y lograr la reutilización
Caso técnico: grupo de subprocesos, grupo de conexiones de base de datos a partir de JDK1.5, proporciona grupo de subprocesos incorporado
En segundo lugar, los beneficios del grupo de subprocesos
1) Mejora la velocidad de respuesta (reduce el tiempo para crear un nuevo hilo)
2) Reduzca el consumo de recursos (reutilice los subprocesos en el grupo de subprocesos, no es necesario crearlos cada vez)
3) Mejore la capacidad de administración de subprocesos: evite la creación ilimitada de subprocesos, destruyendo así los recursos del sistema, reduciendo la estabilidad del sistema, incluso el desbordamiento de memoria o el agotamiento de la CPU
En tercer lugar, la aplicación del grupo de subprocesos
1) Se requiere una gran cantidad de hilos y el tiempo para completar la tarea es corto
2) rendimiento exigente
3) Acepte un gran número de solicitudes repentinas
Cuarto, use el grupo de subprocesos para ejecutar una gran cantidad de comandos ejecutables
1 grupo de clase pública 1 { 2 main estático vacío público (String [] args) { 3 // Cómo crear un grupo de subprocesos 4 // (1) Crear un grupo de subprocesos, solo hay un objeto de subproceso en el grupo de subprocesos 5 // ExecutorService pool01 = Ejecutores .newSingleThreadExecutor (); 6 // (2) Crear un grupo de subprocesos con un número fijo de subprocesos en el grupo de subprocesos 7 ExecutorService pool01 = Executors.newFixedThreadPool (10 ); 8 // (3) Crear un grupo de subprocesos en el grupo de subprocesos El número de subprocesos se puede cambiar dinámicamente 9 // ExecutorService poolp1 = Executors.newCachedThreadPool (); 10 for ( int i = 0; i <20; i ++ ) { 11 final int n = i; 12 comando Runnable = new Runnable () { 13 @Override 14 public void run () { 15 System.out.println ("开始 执行:" + n); 16 prueba { 17 Thread.sleep (2000 ); 18 } catch (InterruptedException e) { 19 // TODO Bloque de captura generado automáticamente 20 e.printStackTrace (); 21 } 22 System.out.println ("Fin de la ejecución:" + n); 23 } 24 }; 25 // Fin de la tarea 26 // Entregue la tarea al hilo en el grupo de hilos para ejecutar 27 pool01.execute (comando); 28 } 29 // Cierre el grupo de subprocesos 30 pool01.shutdown (); 31 } 32 }
Cinco, use el grupo de subprocesos para realizar una gran cantidad de tareas invocables
1 public class pool2 { 2 public static void main (String [] args) lanza ExecutionException, InterruptedException { 3 // Cómo crear un grupo de hilos 4 // (1) Crear un grupo de hilos, solo hay un objeto de hilo en el grupo de hilos 5 // ExecutorService pool1 = Executors.newSingleThreadExecutor (); 6 // (2) Crear un grupo de subprocesos con un número fijo de subprocesos en el grupo de subprocesos 7 ExecutorService pool1 = Executors.newFixedThreadPool (10 ); 8 // (3) Crear un grupo de subprocesos, El número de subprocesos en el conjunto de subprocesos se puede cambiar dinámicamente 9 // ExecutorService pool1 = Executors.newCachedThreadPool (); 10 //Cree una colección 11 List <Future> list = new ArrayList <> (); 12 / ** Use el grupo de subprocesos para realizar una gran cantidad de tareas invocables * / 13 para ( int i = 0; i <20; i ++ ) { 14 invocable <Integer > task = new Callable <Integer> () { 15 @Override 16 public Integer call () lanza Exception { 17 Thread.sleep (2000 ); 18 return ( int ) (Math.random () * 10) +1 ; 19 } 20 }; 21 // Fin de la tarea 22 // Convierta la tarea en el grupo de subprocesos 23 Futuro f = pool1.submit (tarea); 24 list.add (f); 25 // System.out.println (f.get () ); 26 } 27 System.out.println ("¿ok?" ); 28 // Colección transversal 29 para (Future future: list) { 30 System.out.println (future.get ()); 31 } 32 System. out.println ("¡OK!" ); 33 // Cerrar grupo de subprocesos 34 pool1.shutdown (); 35 } 36 }