Otimização de encadeamento Java com 100% de uso da CPU

Eu tenho um aplicativo que aceita o trabalho em uma fila e, em seguida, gira esse trabalho para ser concluído em segmentos independentes. O número de threads não é enorme, digamos até 100, mas são tarefas intensivas e podem aumentar rapidamente a CPU em até 100%.

Para fazer o máximo possível o trabalho mais rápido: será melhor lançar mais threads quando precisar trabalhar mais e deixar o agendador de encadeamentos Java manipular a distribuição do trabalho ou ficar mais inteligente e gerenciar a carga de trabalho para manter a CPU abaixo? 100% me deixa mais rápido?

A máquina é dedicada ao meu aplicativo java.

EDITAR:

Obrigado pela fantástica entrada!

As tarefas são de complexidade variada e envolvem E / S, portanto, ter um conjunto de threads baixo de, digamos, 4 pode estar apenas executando a CPU em 20%. Não tenho como saber quantas tarefas realmente levarão a CPU a 100%.

Meu pensamento era se eu monitorava a CPU através do RMI e discava dinamicamente o trabalho para cima e para baixo, ou deveria simplesmente não me importar e deixar o SO lidar com isso.

questionAnswers(5)

yourAnswerToTheQuestion