ECO2004:
Olá, pessoal!
Estou com uma dúvida com relação à interface ExecuteService.
Essa interface possui a declaração de um conjunto de métodos que servem para gerenciar Execute.
O que não entendo é o seguinte.
Quando vou criar um pool de thread, faço:
ExecuteService threadExecutor = Executors.newFixedThreadPool(algumInteiro)
Mas ExecuteService é uma interface. Não entendi essa criação de “objeto” de interface (threadExecutor) e nem essa atribuição!
ExecuteService deriva de Execute. Assim, herda a declaração do método “execute”, usada para rodar as threads.
Para entenderem melhor a minha dúvida, seria normal ao meu ver ExecutorService ser uma classe e assim fazer threadExecutor.execute(Runnable r).
Espero ter sido claro!
Você está tendo um problema de Java, não de threads.
Variáveis não são a mesma coisa que objetos.
Variáveis podem ter um tipo (interface ou classe), e são posições de memória que guardam referências a objetos (mas não os próprios objetos;
Objetos devem ter uma classe, e é a classe que implementa interfaces.
Quando você declara “ExecutorService threadExecutor”, está indicando que você está declarando uma variável (ou seja, um espaço em memória que contém uma referência, cujo tipo é a interface ExecutorService).
Dessa forma, essa variável pode conter uma referência a qualquer objeto que pertença a uma classe que implemente a interface ExecutorService. Por exemplo, poderíamos ter:
ExecutorService threadExecutor = Executors.newFixedThreadPool (...); // este método retorna um objeto da classe ThreadPoolExecutor, que implementa ExecutorService
ExecutorService threadExecutor = Executors.newSingleThreadExecutor(...); // este método retorna um objeto da classe FinalizableDelegatedExecutorService
ExecutorService threadExecutor = Executors.newScheduledThreadPool(...); // este método retorna um objeto da classe ScheduledThreadPoolExecutor
Mas você, usando essa variável, não precisa saber a classe concreta desse objeto, se você só se limitar a chamar os métodos definidos pela interface.