Pergunta de entrevista***

Vamos lá, diretamente ao ponto:
Internamente, as tasks são inseridas em uma Blocking Queue da qual as threads do pool estão sendo desenfileirados. Quando uma nova task é inserida na fila, uma das threads ociosas a desenfileirará com sucesso e a executará. O restante das Threads ociosas no pool serão bloqueadas, aguardando para desenfileirar tasks.
Thread Pool é usado principalmente para reduzir o número de threads do aplicativo e fornecer gerenciamento das threads de trabalho. Os aplicativos podem enfileirar itens de trabalho(work items), associar esses workers à handles, enfileirar automaticamente com base em um keepAliveTime e vincular com I/O.
Resposta curta:
Java Thread pool representa um grupo de threads de trabalho que estão aguardando a tarefa e são reutilizadas muitas vezes.
Agora um pouco mais devagar 🙂
Vamos dar uma olhada em alguns recursos chave da classe ThreadPoolExecutor:
corePoolSize: o número mínimo de workers para manter vivos.
maximumPoolSize: a capacidade do pool.
keepAliveTime: tempo limite em nanossegundos para threads que estejam ociosas.
workQueue: a fila usada para manter as tasks e entregar para worker threads.
allowCoreThreadTimeOut: usado para aplicar a política de tempo limite à threads principais, desde que o valor keepAliveTime seja diferente de zero.
Como esses atributos estão vinculados?
Uma analogia:
Imagine o pool de threads como uma fábrica;
Core Thread são funcionários em tempo integral da fábrica;
Non-core Threads são os contratados terceirizados;
Blocking Queue (fila de bloqueio) é o pool de tarefas(task pool).
Quando uma task é entregue à fábrica, os funcionários em tempo integral são solicitados primeiro a lidar com as tasks.
Se todos os funcionários estiverem ocupados, a task será colocada no task pool.
Se o task pool estiver cheio, a fábrica solicita aos contratados terceirizados que concluam as tasks.
Se todos os funcionários e contratados estiverem ocupados, a fábrica rejeitará as novas tasks recebidas.
Se os funcionários terceirizados terminarem suas tasks, eles aguardarão um pouco (por exemplo, keepAliveTime) e deixarão a fábrica se nenhuma nova task for dada.
No entanto, parece que os funcionários em tempo integral estão esperando e trabalhando para sempre.
A fábrica decide liberar os funcionários em tempo integral depois de algum tempo, como contratados terceirizados, ativando o switch allowCoreThreadTimeOut.
Vantagem:
Performance, pois não há necessidade de criar novas threads.
Espero ter ajudado e ter proporcionado uma boa leitura.
Obrigado.
Leave a Reply