pool de threads processo para executar tarefas

Após o pool de threads é como trabalhar isso, para emprestar um livro de arte palavras de programação concorrente para descrever quando uma tarefa submetida à piscina piscina rosca será como fazer?

Primeiro de tudo, o pool de threads irá determinar o núcleo thread do pool (número total de threads é 30, então pode haver coreSize 10) se todas as tarefas. Se você não dizer que apenas 9 do segmento atual cria um novo tópico no trabalho, a partir do núcleo do pool de threads para executar a tarefa. Se você tem atualmente 10 tópicos no trabalho, e, em seguida, entrar na próxima etapa;

em segundo lugar, o pool de threads irá determinar se a fila de trabalho está cheio, se a fila de trabalho não está cheio, a tarefa será armazenada na fila de trabalho recém submetido, se o trabalho fila está cheia, em seguida, digite o próximo processo;

e, finalmente, o pool de threads se todos os fios estão trabalhando, e se não, isto é, 30 tópicos apenas 25 de trabalho, crie um novo segmento de trabalho para executar a tarefa, se você já tem 30 tópicos para executar, não há nenhum thread inactivo,

em seguida, para a estratégia de saturação para lidar com esta tarefa (a estratégia de saturação padrão para lançar uma exceção).
Depois de enviar a tarefa tentará primeiro o thread do pool núcleo de fazer, mas um número limitado de tópicos deve ser o núcleo do pool de threads, é necessário fazer uma fila tampão pela tarefa, a primeira tarefa de colocar a fila primeiro, e depois thread para executar espera, finalmente, porque muitas tarefas, a fila estava cheia, e desta vez o resto do thread do pool irá iniciar um pool de threads para a missão de ajuda núcleo. Se ainda não há maneira de lidar adequadamente com a tarefa recém-chegado, a tarefa do novo pool de thread só pode ser submetido à estratégia de saturação de lidar.

Criar um novo pool de threads ThreadPoolExecutor (corePoolSize, maximumPoolSize, KeepAliveTime, milissegundos,

runnableTaskQueue, manipulador);

O manipulador último parâmetro é uma estratégia de saturação, quadro pool de threads java pode fornecer quatro tipos de estratégias:

1) AbortPolicy: jogar direto uma exceção

2) CallerRunsPolicy: onde somente o segmento de chamada para executar a tarefa

3) DiscardOldestPolicy: recentemente retirado da fila de uma tarefa, e executar a tarefa actual.

4) DiscardPolicy: sem tratamento, descartado.

Finalmente, incluímos um pool de threads max = 5, core = 3, a tarefa fila TaskQueue = 5; com a estratégia saturado 1)

, em seguida, olhamos para essa lógica de execução para enviar a tarefa para o pool de threads da seguinte forma:

1) Em primeiro lugar, submetido tarefa ao pool de threads, quando o número do núcleo de tópicos que não são úteis, ele vai começar um dos fios do núcleo para executar tarefas, lembre-se para ilustrar este processo, tendo a tarefa de nosso tempo é muito longo, por isso, um curto período de tempo não vai acabar;

2) o segundo terço e, em seguida, enviar a tarefa para o pool de threads, a mesma lógica para executar sua primeira tarefa é exatamente o mesmo, vai começar o fio do núcleo thread do pool piscina para executar as restantes duas tarefas a sua nova submissão.

3) Em seguida, há o novo envio de trabalhos ao longo, desta vez encontramos a piscina thread do pool do núcleo de fio já está no trabalho, ele vai olhar se fila de tarefas TaskQueue está cheio, e não encontrou, está vazio, assim que esta quando a tarefa para a fila de tarefas para o segmento núcleo piscina segmentos ociosos-se tem que tomar a execução da tarefa.

4) Em seguida, ele apresentou quatro tarefas ao pool de threads, eles foram julgados fio do núcleo é ocioso, não ocioso, e, em seguida, determinar se a fila de tarefas estiver cheia, insatisfação, diretamente na fila de tarefas;

5) seguido por uma nova tarefa novamente , depois de julgar o pool de threads de núcleo e a fila de tarefas, a tarefa é ainda encontrado nenhuma maneira de lidar com determinará se o número máximo de threads e descobriu que não, o novo segmento é iniciado para executar a tarefa;

6) em seguida veio uma tarefa, realizar o mesmo procedimento 5);

7) mais uma tarefa, encontrar o núcleo do pool de threads está ocupado, a fila de tarefas foi completo, todos os fios na piscina também estão no trabalho, não há nenhuma maneira de lidar com ele, então ele encontrou uma estratégia de saturação, porque a estratégia é o lançamento de saturação padrão anormal, de modo que o thread do pool dirá submeter a tarefa tem sido nenhum segmento pode usar o.

Mais do que apenas um número núcleo de tópicos é 3, o número total de threads é 5, o comprimento da fila tarefa é 5, processo de adoção de política padrão Lança estratégia desde o início até o fim do pool de threads operar em plena capacidade

Mais materiais de aprendizagem java pode estar preocupado com: itheimaGZ get

Publicado 735 artigos originais · ganhou elogios 3 · Exibições 110.000 +

Acho que você gosta

Origin blog.csdn.net/u010395024/article/details/104834511
Recomendado
Clasificación