Qual a diferença entre Thread e implementações de ExecutorService?

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();
	
	
	
}

}[/code]

Impressionante!

Eu estou com a mesma dúvida…

Att.

É 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.

euprogramador,
então eh melhor utilizar os executores ao invés das Threads??

Com toda certeza,

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.