Seis, grupo de subprocesos

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 }

Supongo que te gusta

Origin www.cnblogs.com/qiaoxin11/p/12721134.html
Recomendado
Clasificación