grupo de subprocesos ThreadPoolExcutor

Ejecutores manera de crear grupo de subprocesos nativos

agrupación de hebras de Java dentro de la interfaz de nivel superior es Ejecutor , pero no es un estricto agrupaciones de hebras sentido ejecutor, pero sólo un hilo de herramienta de ejecución. La interfaz es un grupo de subprocesos verdadera ExecutorService

grupo de subprocesos no recomienda el uso de los ejecutores de crear, pero a modo ThreadPoolExecutor, este enfoque permite a los estudiantes a escribir grupo de subprocesos normas de funcionamiento más explícito, para evitar el riesgo de agotamiento de los recursos. Descripción: Executors desventajas de cada método:
. 1) y newFixedThreadPool newSingleThreadExecutor:
  主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。
2) y newCachedThreadPool newScheduledThreadPool:
  主要问题是线程数最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至OOM。

 

 2、无界队列。使用无界队列(典型的便是采用预定义容量的 LinkedBlockingQueue,理论上是该缓冲队列可以对无限多的任务排队)将导致在所有 corePoolSize 线程都工作的情况下将新任务加入到缓冲队列中。这样,创建的线程就不会超过 corePoolSize,也因此,maximumPoolSize 的值也就无效了。当每个任务完全独立于其他任务,即任务执行互不影响时,适合于使用无界队列。newFixedThreadPool采用的便是这种策略。

 3、有界队列。当使用有限的 maximumPoolSizes 时,有界队列(一般缓冲队列使用ArrayBlockingQueue,并制定队列的最大长度)有助于防止资源耗尽,但是可能较难调整和控制,队列大小和最大池大小需要相互折衷,需要设定合理的参数。

 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 4, 3,
                TimeUnit. SECONDS, new ArrayBlockingQueue<Runnable>(3),
                new ThreadPoolExecutor.DiscardOldestPolicy());

cola acotado: si la longitud de la cola excede la longitud de una estrategia de caminar rechazada, de lo contrario la cola de acceso para el procesamiento

Publicado 24 artículos originales · ganado elogios 0 · Vistas 433

Supongo que te gusta

Origin blog.csdn.net/WillliveWillWork/article/details/102560412
Recomendado
Clasificación