Os threads virtuais do Java, introduzidos no JDK 21 em setembro de 2023 para facilitar a escrita e a manutenção de aplicativos simultâneos, sofreram com um problema de “fixação” que surge com métodos sincronizados ou instruções sincronizadas.

A Oracle detalhou o problema de fixação de thread virtual esta semana no site Inside Java. Os dois casos mais comuns envolvem um estacionamento de thread virtual durante um método sincronizado e um bloqueio de thread virtual ao entrar em um método sincronizado, porque o monitor associado ao objeto é mantido por outro thread. Em ambos os casos, o transportador ou thread nativo não é liberado para realizar outros trabalhos. A fixação de threads virtuais pode afetar o desempenho e a escalabilidade e potencialmente resultar em privação e impasse, de acordo com a postagem do blog.

Novas compilações de acesso antecipado para o Project Loom do Java introduzem alterações na implementação do monitor de objetos que não são fixadas nesses dois casos comuns. A equipe do Loom está buscando a ajuda dos usuários para testar a confiabilidade e o desempenho desses monitores de objetos atualizados com código que usa threads virtuais e com bibliotecas altamente sincronizadas. Para relatar um problema, os desenvolvedores devem usar a lista de discussão do Loom.

Project Loom é o projeto OpenJDK que desenvolve recursos JVM e APIs para oferecer suporte à simultaneidade leve. Previstos no JDK 19 e JDK 20, os threads virtuais são threads leves que reduzem drasticamente o esforço de gravação, manutenção e observação de aplicativos simultâneos de alto rendimento, de acordo com a Oracle. Apesar do problema de fixação, a Oracle disse que os threads virtuais foram extremamente bem recebidos pela comunidade e ecossistema Java.