Eu tenho um programa java que escuta em uma porta para entrada. Com base na entrada, ele chama um serviço da web e retorna um sucesso / falha de volta ao programa cliente.
Eu bifurco um fio para cada conexão do cliente. A resposta de volta ao cliente que se conecta ao programa deve ser rápida.
Essas são as escolhas que estou considerando
- use threads regulares
- use
ExecutorService
comnewFixedThreadPool
- use
ExecutorService
comnewCachedThreadPool
A razão pela qual estou considerando Pools é porque meus threads têm vida curta - eles apenas chamam um serviço da web, retornam o resultado ao cliente e fecham a conexão.
Eu não acho newFixedThreadPool
que seria a coisa certa, porque então as conexões estariam esperando nas filas para obter um encadeamento.
newCachedThreadPool
teria sido perfeito, exceto por uma coisa - os fios morrem depois de um minuto. No meu caso, recebo rajadas de conexões - ou seja, várias conexões e, em seguida, pode haver uma pausa por alguns minutos e, novamente, rajadas. Eu acho que os threads no CachedThreadPool morrem e precisam ser recriados novamente - portanto, nesse caso, pode funcionar como o número 1 às vezes.
Idealmente, eu adoraria ter newCachedThreadPool
um mínimo - ou seja, uma configuração que diz que o número de threads nunca ficaria abaixo da palavra 20. Assim, os threads inativos são eliminados, mas nunca permitem que eles fiquem abaixo de um limite mínimo.
Existe algo assim disponível? Ou existem alternativas melhores?