Bom dia Senhores,
Estou com uma dúvida com relação ao Pool de Threads da classe ExecutorService.
Ambiente:
Tenha uma conexão UDP que fica recebendo pacote de uma determinada porta.
Sempre que um pacote chega eu realizo a criação de uma Thread para consumir esse pacote.
A quantidade maximo de Thread que o sistema deve abrir seria 10.
Se as 10 Threads estiverem ocupadas então o sistema deve aguardar até que uma das Threads seja liberada para processa o pacote.
Duvida:
Após realizar a implementação, me parece que a classe ExecutorService apenas impede a quantidade de Threads executando em paralelo, e não a quantidade máxima de Threads que devem ser utilizadas pelo Pool.
Pelo que percebo, póde existir um momento no qual 1000 Threads são criadas, no entanto, apenas 10 estão em execução.
public static void main(String[]args) throws IOException, SQLException, InterruptedException{
ConnectionServer conexao = new ConnectionServer();
conexao.loadServerProperties("server");
conexao.openListenerUDP();
ConnectionFactoryDatabase.loadDataSourceProperties("database");
ConnectionFactoryDatabase.openConnectionDatabase();
ThreadCheckSalvePackage.loadThreadsProperties("threads");
ExecutorService poolThreads = Executors.newFixedThreadPool(ThreadCheckSalvePackage.getMaxThreads());
while(true) {
String bufferPackage = conexao.getPackageUDP();
poolThreads.execute(new ThreadCheckSalvePackage(bufferPackage));
}
}
Ou sera que estou enganado e a implementação acima realiza exatamente oq desejo?
Existe algum metodo da classe ExecutorService no qual o sistema fica em Sleep aguardando alguma Thread do Pool ser Liberada?
Obs: public class ThreadCheckSalvePackage implements Runnable
Obrigado.