pool de threads ThreadPoolExcutor

Executores maneira de criar pool de threads nativo

Java pool de threads dentro da interface de nível superior é Executor , mas não é um sentido estrito do executor pools de threads, mas apenas um segmento da ferramenta de execução. A interface é um pool de threads verdadeira ExecutorService

pool de threads não recomenda o uso de executores para criar, mas por ThreadPoolExecutor forma, esta abordagem permite que os alunos a escrever mais explícito regras de funcionamento pool de threads, para evitar o risco de esgotamento dos recursos. Descrição: executores desvantagens de cada método:
. 1) e newFixedThreadPool newSingleThreadExecutor:
  主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。
2) e 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());

fila limitada: se o comprimento da fila excede o comprimento de uma estratégia curta rejeitado, caso contrário fila de acesso para o processamento

Publicado 24 artigos originais · ganhou elogios 0 · Visualizações 433

Acho que você gosta

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