Qual a diferença de usar a classe Thread e as classes que Implementam ExecutorService ???
criei 2 classes quase iguais, onde MyThread implementa Runnable.
Aparentemente não há diferenças no resultado mas gostaria da ajuda de vcs!
Com ExecutorService:
[code]public class TesteThreads {
public static void main(String[] args) {
MyThread mt = new MyThread("t1");
MyThread mt2 = new MyThread("t2");
MyThread mt3 = new MyThread("t3");
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(mt);
exec.execute(mt2);
exec.execute(mt3);
}
}[/code]
Com Thread:
[code]public class TesteThreads {
public static void main(String[] args) {
MyThread mt = new MyThread("t1");
MyThread mt2 = new MyThread("t2");
MyThread mt3 = new MyThread("t3");
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt2);
Thread t3 = new Thread(mt3);
t1.start();
t2.start();
t3.start();
}
É o seguinte, as thread são linhas de execução e as mesmas, tem um ciclo de vida bem definido, você cria a thread, poe ela para esperar na fila de execução com o start, ela passa a ser executada, ai ela pode ficar suspensa, ou ir dormir, após o processamento dela, ela termina, e acaba ocupando espaço na mémoria, mesmo não sendo mais executada, um executor, é uma estratégia de execução de thread, onde você cria cache de thread por exemplo 80 threads, ele vai gerenciar a execução de threads, o uso do executors para uma aplicação mais robusta é muito necessário, e ainda não esqueça que você tem dois modelos de execução de threads os prepitivos (acho que é assim que se escreve) que é usado em sistemas baseados no unix e o time-slice que é usado no windows, portanto, quando se trata de threads a execução de um programa em linux e diferente do windows, portanto tenha cuidado no que estiver usando threads pois o sistema executa diferente em diferentes sistemas operacionais.
Mas lembre-se você tem de usar corretamente os métodos yield, sleep, wait, notify, geralmente não é recomendado programar com thread (inclusive com executors) visto ser de dificil detectar erros.
Tive sucesso e algumas implementações com threads em um antispam que desenvolvi, mas realmente é muito complicado programar usando thread portanto, se puder, evite-as.
Sim use ExecutorService mas uma coisa… ele executa Runnable então faça suas classes implementarem Runnable invés de extenderem Thread. Para a JVM é custoso criar uma nova Thread e o ExecutorService aproveita as Threads do pool que não estão executando nada para executar o seu objeto Runnable.