Virtual threads, finais desde o Java 21, são threads leves escalonadas pela JVM sobre um pool pequeno de carrier threads. Quando uma bloqueia em I/O, ela desmonta e libera o carrier, então um milhão de tarefas concorrentes custa pouco. Na prática, você volta a escrever código bloqueante simples e usa uma thread por requisição em vez de um executor com pool fixo, e nunca faz pool de virtual threads porque criar uma é barato.
Por que os entrevistadores perguntam isso
Essa é a maior mudança na concorrência do Java em uma década, então ela separa quem acompanha a plataforma de quem parou no Java 8. O entrevistador quer ouvir o comportamento de mount e unmount, que virtual threads ajudam em I/O bloqueante e não em trabalho CPU bound, e que fazer pool delas é um antipadrão. Também abre espaço para pinning, thread locals e como você limita a concorrência agora.
Como estruturar sua resposta
- Defina como threads escalonadas pela JVM com criação barata.
- Explique o mount e o unmount em uma carrier thread durante chamadas bloqueantes.
- Diga o que muda no seu código: uma thread por tarefa, sem pool.
- Cite os limites: trabalho CPU bound, pinning, custo de thread local.
Exemplo de resposta
Uma virtual thread é escalonada pela JVM e não pelo sistema operacional, então ela custa algumas centenas de bytes em vez de um megabyte de stack. Quando ela bloqueia em uma leitura de socket, ela desmonta da carrier platform thread e o carrier vai rodar outra coisa, depois ela remonta quando o dado chega. Isso significa que o velho motivo para fazer pool de threads desaparece. Eu uso um executor que cria uma virtual thread por tarefa, e o código continua sendo código bloqueante simples, muito mais fácil de ler e depurar do que uma cadeia de callbacks. Duas coisas que eu mantenho em mente. Primeiro, elas não fazem nada por trabalho CPU bound, já que você continua tendo só os núcleos que tem; o ganho está no atendimento de requisições pesadas em I/O. Segundo, elas removem o limite acidental de concorrência que um pool fixo me dava, então se eu estou chamando um banco com um pool de cinquenta conexões, eu coloco um semáforo ou o próprio pool na frente, senão dez mil virtual threads caem em cima dele de uma vez.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- O que faz uma virtual thread dar pin no seu carrier, e isso ainda é um problema?
- Como você limita a concorrência sobre um recurso downstream sem um thread pool?
- Por que thread locals ficam mais caros quando você tem um milhão de threads?
Mais perguntas para Desenvolvedor Java
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas