Olá, Isabela! Como vai?
Vamos lá, você tem duas perguntas bem interessantes. Vou tentar esclarecer cada uma delas:
A quantidade máxima de threads que pode ser criada não é limitada pela quantidade de núcleos da máquina. Na verdade, você pode criar muitas threads, muito além do número de núcleos disponíveis. No entanto, o número de threads que podem ser executadas simultaneamente (ou seja, em paralelo) é limitado pelo número de núcleos, pois cada núcleo pode executar apenas uma thread por vez. Portanto, se você tem uma CPU de 4 núcleos, você pode ter, por exemplo, 1000 threads, mas apenas 4 delas serão executadas ao mesmo tempo, as outras estarão aguardando sua vez.
Quando você cria mais threads do que o número de núcleos disponíveis, a JVM não bloqueia nada. O que acontece é que o sistema operacional começará a alternar as threads em execução nos núcleos disponíveis, um processo chamado de "context switching". Isso pode levar a uma sobrecarga, pois o sistema operacional precisa gerenciar quando e onde cada thread será executada. Portanto, embora possa parecer que todas as suas threads estão sendo executadas ao mesmo tempo, na realidade, elas estão sendo rapidamente alternadas nos núcleos disponíveis.
Em relação às "green threads", você está correta. As "green threads" eram threads simuladas inteiramente no espaço do usuário, em vez de serem threads nativas do sistema operacional. Elas foram usadas em algumas versões antigas do Java, mas não são mais usadas desde o Java 1.2.
Quando você cria mais threads do que núcleos, nem tudo fica bloqueado. Como mencionei, o sistema operacional começará a alternar as threads em execução nos núcleos disponíveis. Isso pode levar a uma sobrecarga, mas não bloqueia a execução.
Espero ter esclarecido as suas dúvidas e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.